jwm(1)

✨ NAME ✨

okay so, welcome to jwm(1), straight outta the General Commands Manual πŸ’– this is the whole tea on JWM β€” Joe's Window Manager β€” and no, I'm not gatekeeping a single line of it. 🫢


🌸 SYNOPSIS 🌸

jwm [options]

πŸ¦‹ DESCRIPTION πŸ¦‹

JWM is a window manager for the X11 Window System. that's the whole vibe. iconic. πŸ‘‘


πŸ’… OPTIONS πŸ’…

  • -display display β€” says which display to use, bestie. see X(1) if you need the lore.
  • -exit β€” bounces JWM out by sending _JWM_EXIT to the root window. bye babes 🫑
  • -f file β€” point JWM at an alternate configuration file instead of the usual one.
  • -h β€” shows a help message and dips.
  • -p β€” parses the config file and exits. fr fr, run this after you touch your config so you know there are no errors. it's the vibe check your config deserves.
  • -restart β€” restarts JWM by sending _JWM_RESTART to the root window.
  • -reload β€” reloads menus by sending _JWM_RELOAD to the root window.
  • -v β€” shows version info and exits. slay.

πŸŽ€ FILES πŸŽ€

  • /etc/jwm/system.jwmrc β€” the default JWM configuration file.
  • ~/.jwmrc β€” the default local configuration file. copy the default config file to this location to make user-specific changes. see also, option -f.

🌈 CONFIGURATION 🌈

🧚 OVERVIEW 🧚

Configuring JWM is done by editing ".jwmrc" β€” or whatever config file you passed with the -f option. This file is XML, which makes it lowkey easy to edit, whether by hand or programmatically. The example.jwmrc gives an example configuration file. Before restarting JWM, it is a good idea to run "jwm -p" to make sure the configuration file is free of errors. Otherwise you may end up without a root menu. 😭

not me warning you twice β€” that root menu thing is real, bestie. check your config first. 🫢

πŸ‘‘ ROOT MENU πŸ‘‘

The root menu in JWM is the primary way of starting programs. It also provides a way to restart or exit the window manager. The outer most tag is RootMenu. The following attributes are supported:

  • onroot list β€” Determine which buttons on the root window activate the menu. This is a list of integers specifying buttons. The default is "123". Note that multiple root menus may be specified by using different buttons for different menus. The range of possible values is 0 to 9 inclusive as well as a to z inclusive, providing for up to 36 menus. Note that only the numeric values map to mouse buttons.
  • height int β€” Height of each menu item in pixels. 0 indicates the largest menu item will determine the height. The default is 0.
  • labeled bool β€” Determines if a label appears at the top of the menu. Default is false.
  • label string β€” The label to display at the top of the menu. Default is "JWM".
  • dynamic string β€” A dynamically loaded menu. If the text starts with exec:, the output of the specified program is used.

Within the RootMenu tag, the following tags are supported:

This tag creates a submenu item. Any of the tags allowed within the RootMenu tag, including the Menu tag are allowed within this element. The following attributes are supported:

  • height int β€” Height of each menu item in pixels. 0 indicates the largest menu item will determine the height. The default is inherited from the parent menu.
  • label string β€” The label to use. No default.
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this menu. No default.
  • labeled bool β€” Determines if a label appears at the top of the menu. Default is false.

πŸ¦‹ Dynamic πŸ¦‹

Dynamically include the contents of a file or executable into a submenu. The file must start with a "JWM" tag. The file is specified by the text of the tag. If the text starts with "exec:" then the output of a program is used. This tag supports the same attributes as Menu. A timeout attribute may be specified to set a timeout in milliseconds. The default timeout is 5000 milliseconds (5 seconds).

✨ Include ✨

Include the contents of a file into the menu structure. The file must start with a "JWM" tag. The file is specified by the text of the tag. If the text starts with "exec:" then the output of a program is used. A timeout attribute may be specified to set a timeout in milliseconds. The default timeout is 5000 milliseconds (5 seconds).

πŸ’œ Program πŸ’œ

The Program tag provides a way to start an external program. The text in this tag is the command used to start the program. The following attributes are supported:

  • label string β€” The label to display. Default is the text of the tag.
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use. No default.

πŸŽ€ Separator πŸŽ€

This tag simply puts a line in the menu allowing menu divisions. No text or attributes are used.

πŸ’– Desktops πŸ’–

Add a desktop menu. This will add a submenu with a list of desktops that can be used to change the current desktop. The following attributes are supported:

  • label string β€” The label to use for the menu. The default is "Desktops".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

🫢 SendTo 🫢

Add a "send to" menu to the menu. After selecting an item from this menu, a window may be selected to send that window to the selected desktop. The following attributes are supported:

  • label string β€” The label to use. The default is "SendTo".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

⭐ Stick ⭐

Add a stick/unstick window operation to the menu. After selecting this item a window may be selected to toggle the sticky state of that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Stick".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

πŸ”₯ Maximize πŸ”₯

Add a maximize window operation to the menu. After selecting this item a window may be selected to toggle the maximized state of that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Maximize".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

πŸ™ˆ Minimize πŸ™ˆ

Add a minimize window operation to the menu. After selecting this item a window may be selected to minimize that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Minimize".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

πŸ“ Shade πŸ“

Add a shade/unshade window operation to the menu. After selecting this item a window may be selected to toggle the shaded status of that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Shade".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

🌈 Move 🌈

Add a move window operation to the menu. After selecting this item a window may be selected to move that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Move".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

πŸ’« Resize πŸ’«

Add a resize window operation to the menu. After selecting this item a window may be selected to resize that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Resize".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

πŸ’€ Kill πŸ’€

Add a kill window operation to the menu. After selecting this item a window may be selected to kill that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Kill".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

🎁 Close 🎁

Add a close window operation to the menu. After selecting this item a window may be selected to close that window. The following attributes are supported:

  • label string β€” The label to use. The default is "Close".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use for this item. No default.

✨ Restart ✨

okay bestie, this tag drops a menu item that restarts the whole window manager. slay. here's what it supports:

  • label string β€” the label you wanna use. default is "Restart".
  • tooltip string β€” a lil tooltip to show. no default.
  • icon string β€” the icon to use. no default.

πŸ’… Exit πŸ’…

This tag adds a menu item to exit the window manager. If text is present within this tag, it is interpreted as a command to run when JWM exits. This can be used to start another window manager. The following attributes are supported:

  • label string β€” The label to use. The default is "Exit".
  • tooltip string β€” A tooltip to display. No default.
  • icon string β€” The icon to use. No default.
  • confirm bool β€” Determine if a confirm dialog appears before exiting. Default is true.
Note that confirm dialogs can be disabled completely at the compile-time. 😭

🌈 TRAYS 🌈

One or more trays may be created via the Tray tag. This tag supports the following attributes:

  • autohide string β€” Specifies the location to hide the tray when not activated. Default is "off" to disable hiding. Possible values are "left", "right", "top", "bottom", "off", "on" (JWM picks the location), and "invisible" (trays must be activated by a key binding).
  • delay int β€” The delay before hiding the tray in milliseconds. Default is 0 milliseconds.
  • x int β€” The x-coordinate of the tray. This may be negative to indicate an offset from the right of the screen.
  • y int β€” The y-coordinate of the tray. This may be negative to indicate an offset from the bottom of the screen.
  • width int β€” The width of the tray. 0 indicates that the tray should compute an optimal width depending on what it contains and the layout. A negative value subtracts from the screen width. 0 is the default.
  • height int β€” The height of the tray. 0 indicates that the tray should compute an optimal height depending on what it contains and the layout. A negative value subtracts from the screen height. 0 is the default.
  • screen int β€” The index of the screen on which to start the tray. 0 is the default (the primary screen).
  • layer { below | normal | above } β€” The layer of the tray. The default is above.
  • layout { vertical | horizontal } β€” The layout of the tray. The default is horizontal.
  • valign { fixed | top | center | bottom } β€” The vertical alignment of the tray. The default is fixed.
  • halign { fixed | left | center | right } β€” The horizontal alignment of the tray. The default is fixed.

Within this tag the following tags are supported:

πŸ•°οΈ Clock πŸ•°οΈ

Add a clock to the tray. The text of this tag determines what action to take when the clock is clicked. Optionally, one or more Button tags may be specified to bind actions to specific mouse buttons specified via the mask attribute. By default, the button mask is "123". The following actions are supported:

  • root:n β€” Show root menu n. Note that the default TrayButton action is root:1.
  • exec: string β€” Execute a command.
  • showdesktop β€” Minimize all windows on the current desktop.

This tag supports the following attributes:

  • format string β€” The format of the clock. See strftime(3).
  • zone string β€” The time zone of the clock. See tzset(3).
  • width int β€” The width of the clock. 0 indicates that the width should be determined from the length of the text to be displayed.
  • height int β€” The height of the clock. 0 indicates that the height should be determined from the font used.

πŸ“¦ Dock πŸ“¦

Add a dock for system notifications. This can be used by those programs that use the _NET_SYSTEM_TRAY_Sn selection. The size of the Dock is dynamic based on the size of the tray and the number of items contained. Only one Dock is allowed per instance of JWM. This tag supports the following attributes:

  • width int β€” The maximum width of an item contained in the dock. This defaults to the width or height of the tray (whichever is smaller).
  • spacing int β€” The spacing of items contained in the dock (in pixels). This defaults to 0.

πŸ—ΊοΈ Pager πŸ—ΊοΈ

Add a pager to the tray. A pager shows a miniature representation of a desktop. When over the pager, the scroll wheel will switch desktops. Holding down the right mouse button allows you to drag a window around in the pager which changes its position on the real desktop. You can also drag a window in the pager from one desktop to another. This tag supports the following attributes:

  • labeled bool β€” Determines if the pager has text labels. Default is false.

Also see the PAGER STYLE section for more information.

πŸͺ„ Spacer πŸͺ„

Add empty space to the tray. This tag supports the following attributes:

  • width int β€” The width of the spacer (0 to fill all available space). 0 is the default.
  • height int β€” The height of the spacer (0 to fill all available space). 0 is the default.

🐍 Swallow 🐍

Swallow a program into the tray. The text of this tag gives the command to run. This tag supports the following attributes:

  • name string β€” The name of the program to swallow. This attribute is required.
  • width int β€” The width of the swallowed program. 0 indicates that the width should be determined from the tray and size requested from the program. 0 is the default.
  • height int β€” The height of the swallowed program. 0 indicates that the height should be determined from the tray and the size requested from the program. 0 is the default.

πŸ“‹ TaskList πŸ“‹

Add a task list to the tray. This tag supports the following attributes:

  • height int β€” The height of an item in the task list. 0 indicates that the height should be taken from the tray. The default is 0.
  • labeled bool β€” Determines if a label is shown for items in the task list. The default is true.
  • labelpos string β€” Determines the label position in the task list. The default is "right" where the icon is on the left and the label is on the right. Possible values are "right", "top" and "bottom". When the tray is vertical and "top" or "bottom" is chosen, an alternate method for resizing the task list will be used.
  • maxwidth int β€” The maximum width of an item in the task list. 0 indicates no maximum. The default is 0.

πŸ”˜ TrayButton πŸ”˜

Add a button to the tray. The text of this tag determines what action to take when the button is clicked. Optionally, one or more Button tags may be specified to bind actions to specific mouse buttons specified via the mask attribute. By default, the button mask is "123". The following actions are supported:

  • root:n β€” Show root menu n. Note that the default TrayButton action is root:1.
  • exec: string β€” Execute a command.
  • showdesktop β€” Minimize all windows on the current desktop.

This tag supports the following attributes:

  • label string β€” A label to display. No default.
  • popup string β€” A string to be displayed for a popup. This will default to the value specified for label, if provided. If neither popup nor label are specified no popup will be shown.
  • icon string β€” An icon to display. No default.

🌟 INCLUDES 🌟

Other configuration files or the output of programs may be included under the JWM tag via the Include tag. The text of this tag specifies the location of an additional configuration file or program. The path may be relative to the location JWM was started, an absolute path, or a path referencing an environment variable (using '$'). If the text starts with "exec:", the specified program is executed and its output is used. The format of the configuration file or program output is the same as the main configuration file. πŸ¦‹

✨ GROUP SETTINGS ✨

Okay bestie, this is the part where we get specific πŸ’… Program groups let you say "hey, all windows that look like THIS? treat them like THIS" β€” you can filter by name, class, window type, and machine. A group gets born with the Group tag, and you can make as many of them as your little heart desires 🫢

Here's the matching tea though, listen closely:

  • If you drop one or more Name tags, then at least one of those names has to match. No partial credit, periodt.
  • Same deal with Class β€” one or more Class tags means at least one class has to match.
  • JWM does its matching with extended POSIX regular expressions for both Name and Class tags. Go peek at regex(7) if you need a refresher πŸ‘‘

Inside the Group tag, these tags are the whole squad:

  • Name β€” the window name of a program that has to match for it to be in this group (that's the first string in WM_CLASS).
  • Class β€” the window class of a program that has to match for it to be in this group (that's the second string in WM_CLASS).
  • Type β€” the window type a program has to be to match this group. The possible values are desktop, dialog, dock, menu, normal, notification, splash, toolbar, utility.
  • Machine β€” the machine a program runs on for it to match this group (that's the WM_CLIENT_MACHINE string).
  • Title β€” the window title a program needs to match to be in this group (the string in WM_NAME).
  • Option β€” an option for this group. And the possible options are... a whole entire buffet, bestie. Buckle up:
  • aerosnap β€” turn on auto-maximization when a window gets dragged to the corner of the screen.
  • border β€” makes windows in this group have a border.
  • centered β€” center windows in this group on their first placement instead of doing the cascaded placement thing.
  • constrain β€” keep windows in this group pinned to the screen.
  • desktop:# β€” which desktop windows in this group start out on.
  • drag β€” do not pass mouse events to the window. Instead, use the mouse to move/resize the window.
  • fixed β€” lock windows in this group to their initial desktop. This makes the current desktop change when the window is activated, instead of the default behaviour where the window comes to the current desktop.
  • fullscreen β€” make windows in this group start out fullscreen.
  • height:# β€” set the initial window height (in pixels).
  • hmax β€” make windows in this group maximize horizontally.
  • icon:string β€” the icon to use for windows in this group.
  • ilist β€” ignore the program-specified list setting for windows in this group. If it's specified together with nolist, windows will not be listed in the task list; otherwise windows will be listed.
  • iignore β€” ignore the size increment hint when maximizing windows in this group.
  • ipager β€” ignore the program-specified pager setting for windows in this group. If it's specified with nopager, windows won't be shown in the pager; otherwise windows will be shown.
  • layer:string β€” the layer windows in this group start out on. Valid options are below, normal, and above.
  • maximized β€” make windows in this group start out maximized.
  • minimized β€” make windows in this group start out minimized.
  • noborder β€” windows in this group get displayed without a border.
  • noclose β€” stop windows in this group from being closed.
  • nodrag β€” disable mod1+drag moving/resizing for windows in this group.
  • nofocus β€” stops windows in the group from grabbing focus when they're mapped.
  • nofullscreen β€” stop windows in this group from going fullscreen.
  • nolist β€” makes the tray ignore windows in this group when the window is initially mapped.
  • nopager β€” makes the pager ignore windows in this group.
  • nomax β€” stop windows in this group from being maximized.
  • nomaxborder β€” don't show a border on maximized windows in this group.
  • nomaxtitle β€” don't show a title bar on maximized windows in this group.
  • nomin β€” stop windows in this group from being minimized.
  • nomove β€” stop windows in this group from being moved.
  • noresize β€” stop windows in this group from being resized.
  • noshade β€” stop windows in this group from being shaded.
  • notitle β€” windows in this group get displayed without a title bar.
  • noturgent β€” ignore the urgent hint for windows in this group.
  • opacity:# β€” set the opacity for windows in this group. The value is a number between 0.0 and 1.0, inclusive.
  • pignore β€” ignore the initial window position the program asked for.
  • shaded β€” make windows in this group start out shaded.
  • sticky β€” make windows in this group sticky.
  • tiled β€” attempt to tile windows in this group on initial placement. If tiled placement fails, windows fall back to cascaded placement (that's the default) or centered if you specified it.
  • title β€” forces windows in this group to have a title bar.
  • vmax β€” make windows in this group maximize vertically.
  • width:# β€” set the initial window width (in pixels).
  • x:# β€” set the initial x-coordinate of the window. Negative numbers mean the value is relative to the right side of the screen.
  • y:# β€” set the initial y-coordinate of the window. Negative numbers mean the value is relative to the bottom of the screen.

πŸŽ€ WINDOW STYLE πŸŽ€

Now for the glow-up section πŸ’– The WindowStyle tag is the one in charge of how your window borders look. It supports these attributes:

  • decorations β€” the window decorations to use. Valid options are flat and motif. flat is the default.
  • showclient β€” include the X client machine name (WM_CLIENT_MACHINE) in the window title. Valid options are true and false. false is the default.
  • delimiters β€” the two characters used to wrap the X client machine name in the window title. The default characters are ().

And inside this tag, these tags are supported:

  • Font β€” the font used for title bars. Peep the FONTS section for more info. This tag supports one attribute:
    • align β€” the window title alignment. Valid options are left, right, and center. left is the default.
  • Width β€” the width of window borders in pixels. The default is 4, the minimum is 1, and the maximum is 128.
  • Height β€” the height of window title bars in pixels. By default this is set to the size of the title font. The minimum is 1, and the maximum is 256.
  • Corner β€” the corner width of the window border for rounded window borders. The default is 4, the minimum is 0 (rectangular), and the maximum is 5 (most rounded).
  • Active β€” the colors/opacity used for the active window. See the COLORS section for more on colors. These tags are supported:
    • Foreground β€” the color of the text and buttons in the title bar. The default is white.
    • Background β€” the color of the title bar (gradients are supported). The default is #CC7700:#884400.
    • Opacity β€” the opacity of the window. This is a floating point value between 0.0 and 1.0. The default is 1.0. Heads up: a composite manager, like xcompmgr, is required for this πŸ’€
    • Outline β€” the color of the window outline. The default is a darkened version of the window background. If motif window decorations are specified, two colors may be given separated by a ':' to set the down and up colors respectively.
  • Foreground β€” the color of text and buttons in the title bar of inactive windows. The default is white.
  • Background β€” the color of the title bar (gradients are supported) of inactive windows. The default is #333333:#111111.
  • Opacity β€” the opacity of inactive windows. This is a floating point value between 0.0 and 1.0. The default is 0.75. Also needs a composite manager, like xcompmgr, just so you know ✨
  • Outline β€” the color of the outline around an inactive window πŸ’œ. The default? A darkened version of the window background, obvi. And if you've got motif window decorations going on, you can hand it two colors split by a ':' β€” first one sets the down color, second sets the up color. Slay πŸ’…

🍬 TRAY STYLE 🍬

The TrayStyle tag is the one that controls how your trays look. It supports exactly one attribute:

  • decorations β€” the type of decorations your trays get. Possible values are flat and motif. The default is flat. Periodt ✨

And inside this tag, these tags are supported:

  • Font β€” the default tray font. Peep the FONTS section for more. πŸŽ€
  • Foreground β€” the default foreground color. See the COLORS section. 🌈
  • Background β€” the default background color. See the COLORS section. 🌸
  • Outline β€” the color of the tray outline. See the COLORS section. The default is a darkened version of the tray background. If you've specified motif tray decorations, you can give this as two colors separated by a ':' to indicate the down and up colors respectively. πŸ’…
  • Opacity β€” the opacity of trays, a floating point value between 0.0 and 1.0. Heads up bestie: a composite manager like xcompmgr is required for this to do anything. No composite manager, no see-through, iykyk πŸ«₯
  • Active β€” the default colors for active items on the tray. See the COLORS section. It supports these tags:
    • Foreground β€” the default foreground color for active items.
    • Background β€” the default background color for active items.
    • Outline β€” the default outline color for active items. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively. ✨

πŸ“‹ TASK LIST STYLE πŸ“‹

The TaskListStyle tag controls the look of task lists. These attributes are supported:

  • decorations β€” the window decorations to use. Valid options are flat and motif. The default is inherited from TrayStyle πŸ‘‘
  • group β€” determines if windows get grouped by class when they show up in task bars. Possible values are true and false. The default is false.
  • list β€” determines which windows actually show in task bars. Possible values are desktop and all. The default is desktop.
  • showkill β€” determines if the Kill popup menu item is shown on task bars and window title bars. Possible values are true and false. The default is true. πŸ’€

Within this tag, these tags are supported:

  • Font β€” the font to use. See the FONTS section. πŸŽ€
  • Foreground β€” the foreground color. See the COLORS section.
  • Background β€” the background color. See the COLORS section.
  • Outline β€” the color of the button outline. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively.
  • Active β€” the colors for the active items. See the COLORS section. These tags are supported:
    • Foreground β€” the foreground color for active items.
    • Background β€” the background color for active items.
    • Outline β€” the outline color for active items. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively. ✨
  • Minimized β€” the colors for the minimized items. See the COLORS section. These tags are supported:
    • Foreground β€” the foreground color for minimized items.
    • Background β€” the background color for minimized items.
    • Outline β€” the outline color for minimized items. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively. πŸ’…

πŸŽ›οΈ TRAY BUTTON STYLE πŸŽ›οΈ

The TrayButtonStyle tag controls the look of tray buttons. No notes, just vibes.

Within this tag, these tags are supported:

  • Font β€” the font to use. See the FONTS section. πŸŽ€
  • Foreground β€” the foreground color. See the COLORS section.
  • Background β€” the background color. See the COLORS section.
  • Outline β€” the color of the button outline. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively.
  • Active β€” the colors for pressed buttons. See the COLORS section. These tags are supported:
    • Foreground β€” the foreground color for pressed buttons.
    • Background β€” the background color for pressed buttons.
    • Outline β€” the outline color for pressed buttons. See the COLORS section. The default is a darkened version of the background. If motif tray decorations are specified, this may be given as two colors separated by a ':' to indicate the down and up colors respectively. πŸ”₯

πŸ—‚οΈ PAGER STYLE πŸ—‚οΈ

The PagerStyle tag controls the look of pagers. Inside this tag, these tags are supported:

  • Outline β€” the color of the outline around windows shown in the pager. See the COLORS section.
  • Foreground β€” the color of inactive windows shown in the pager. See the COLORS section.
  • Background β€” the background color of inactive desktops shown in the pager. See the COLORS section.
  • Active β€” the colors used for active items in the pager. See the COLORS section. These tags are supported:
    • Foreground β€” the color of active windows shown in the pager.
    • Background β€” the background color of active desktops shown in the pager.
  • Text β€” the color to use for pager labels. See the COLORS section.
  • Font β€” the font to use for pager labels. See the COLORS section. (yes, it says COLORS, we don't make the rules πŸ™ˆ)

⏰ CLOCK STYLE ⏰

The ClockStyle tag controls the look of clocks. Inside this tag, these tags are supported:

  • Font β€” the font to use for clocks. This defaults to the tray font. See the COLORS section.
  • Foreground β€” the foreground (text) color of clocks. This defaults to the tray foreground color. See the COLORS section.
  • Background β€” the background color of clocks (gradients are supported, fancy πŸ’…). This defaults to the tray background color. See the COLORS section.

The MenuStyle tag controls the look of the menus in JWM β€” and yes, that includes the root menu and window menus, so this one's kind of a big deal πŸ‘‘. This attribute is supported:

  • decorations β€” the type of decorations to use for menus. Possible values are flat and motif. The default is flat.

Within this tag, these tags are supported:

  • Font β€” the font used on menus. See the FONTS section. πŸŽ€
  • Foreground β€” the text color of inactive menu items. See the COLORS section.
  • Background β€” the background color of inactive menu items. See the COLORS section.
  • Outline β€” the color of the menu outline. See the COLORS section. The default is a darkened version of the menu background. If motif decorations are used, this may be given as two colors separated by a ':' to indicate the down and up colors respectively.
  • Active β€” the colors used for active menu items. See the COLORS section. These tags are supported:
    • Foreground β€” the text color of active menu items.
    • Background β€” text background color of active menu items (gradients are supported 🌈).

Opacity πŸ«₯

Okay so this one's the see-through-ness of your menus. It's a floating point value living between 0.0 and 1.0, no cap. But bestie, listen: you need a composite manager for this to actually do anything β€” something like xcompmgr. Without one it's giving nothing. πŸ’€


The PopupStyle tag is the glow-up control for your popup windows β€” yk, the lil guys that pop up when your mouse just sits on a task list item. Iconic behaviour. This tag supports these attributes:

  • delay int β€” how long, in milliseconds, before popups activate. Default is 600. Patience is a virtue ig πŸ’…
  • enabled string β€” decides whether popups show up at all. It's a comma-separated list of one or more of these: true (everything on), false (no popups anywhere), button (tray buttons), clock (clocks), menu (menus), pager (pagers), and task (task list items). Default is true ✨

And within this tag, these tags are also supported:

  • Font β€” the font to use. Go peek at the FONTS section for the tea. πŸ”€
  • Outline β€” the color of the window outline. COLORS section has the deets. Default is black. πŸ–€
  • Foreground β€” the text color. Again, COLORS section. ✍️
  • Background β€” the background color. Yep, COLORS section. 🎨

✨ FONTS ✨

Fonts for all the different parts of JWM get specified inside a Font tag. The actual text of that tag is what determines the font you get. And it can be either:

  • an XLFD font string, or
  • if you compiled with Pango support, an XFT font string 🌸

✨ COLORS ✨

Colors for the various parts of JWM live inside specific tags (the ones we described above, mwah). You've got two ways to flex:

  • hex triplets in RGB format β€” like #FF0000 is red πŸ’ƒ
  • a name recognized by the X server

And for components that support gradients?? Oh we're fancy now: you can specify two colors separated by a colon for a horizontal gradient, or a semicolon for a vertical gradient. Slay. 🌈


✨ ICONS ✨

So windows that don't supply an icon via the _NET_WM_ICON hint? JWM goes looking. It searches the icon search path(s) for an icon whose name β€” minus the .xpm or .png extension β€” matches the instance name of the window as returned in the WM_CLASS hint. If that lookup fails, a default icon gets supplied. This icon shows up for the window on its title bar and on the task list. Icons that aren't the right size will be scaled. Square icons work best, fr fr. πŸ”²

For menu items, the icon path gets searched for a match. The icon you specify for a menu item has to be the exact name of the icon file with the extension. If no match is found, a blank area appears where the icon should've been 😭. And if no icon is specified for any menu item in a menu, no space gets allocated for icons at all.

Zero or more IconPath tags may be specified. The text of this tag is assumed to be an absolute directory path to a directory containing XPM, PNG, and/or JPEG icons. When searching for icons, if you gave multiple paths, they get searched in order until a match is made. Heads up tho: icon, PNG, JPEG, and XPM support are all compile-time options. 🧚


✨ KEY BINDINGS ✨

Keyboard bindings in JWM are specified in Key tags. You must specify either the key or keycode attribute to determine which key is gonna cause an action. The optional attribute mask says what key mask, if any, must be in effect for the binding to match. And finally, the text of the Key tag is the action to perform. If there are duplicates, the last action to match is the one that wins. πŸ‘‘

One or more of these key masks may be specified for mask (go see xmodmap(1) if you wanna know more):

  • A β€” the "Alt" key (mod1)
  • C β€” Control
  • S β€” Shift
  • 1 β€” mod1
  • 2 β€” mod2
  • 3 β€” mod3
  • 4 β€” mod4
  • 5 β€” mod5

The key specified in the key attribute must contain a valid key string for XStringToKeysym(3). These values are usually exactly what you'd expect β€” like, the escape key is literally called "Escape". πŸ’…

Valid actions for a key binding are:

  • up β€” move up.
  • down β€” move down.
  • right β€” move right.
  • left β€” move left.
  • escape β€” stop a move/resize, exit a menu, or cancel an action. The universal "nvm" button 😌
  • fullscreen β€” toggle between fullscreen and not fullscreen.
  • select β€” make a menu selection or confirm an action.
  • next β€” move to the next window in the task list.
  • nextstacked β€” move to the next window in the stacking order.
  • none β€” remove the current binding.
  • prev β€” move to the previous window in the task list.
  • prevstacked β€” move to the previous window in the stacking order.
  • at# β€” move to window position in the task list.
  • close β€” close the active window.
  • kill β€” kill the active window. (yes, it's as serious as it sounds πŸ‘€)
  • minimize β€” minimize the active window.
  • maximize β€” maximize the active window.
  • maxv β€” maximize the active window vertically.
  • maxh β€” maximize the active window horizontally.
  • maxtop β€” maximize the active window to the top of the screen.
  • maxtopleft β€” maximize the active window to the top left of the screen.
  • maxtopright β€” maximize the active window to the top right of the screen.
  • maxbottom β€” maximize the active window to the bottom of the screen.
  • maxbottomleft β€” maximize the active window to the bottom left of the screen.
  • maxbottomright β€” maximize the active window to the bottom right of the screen.
  • maxleft β€” maximize the active window to the left of the screen.
  • maxright β€” maximize the active window to the right of the screen.
  • restore β€” restore a maximized window.
  • send# β€” send the active window to the specified desktop. To use this, # must be specified in the key section. The number 1 to the number of desktops configured then gets substituted for #. πŸš€
  • sendl β€” send the active window left.
  • sendr β€” send the active window right.
  • sendu β€” send the active window up.
  • sendd β€” send the active window down.
  • shade β€” shade the active window.
  • stick β€” stick/unstick the active window.
  • move β€” move the active window.
  • resize β€” resize the active window. You can slap an optional suffix on this one to pick which corner of the window you're resizing. The options are:
    • resize:n β€” resize the north side
    • resize:s β€” resize the south side
    • resize:e β€” resize the east side
    • resize:w β€” resize the west side
    • resize:nw β€” resize the north-west corner
    • resize:ne β€” resize the north-east corner
    • resize:sw β€” resize the south-west corner
    • resize:se β€” resize the south-east corner
  • center β€” center the current window.
  • root:n β€” show root menu n.
  • window β€” show the window menu for the active window.
  • desktop# β€” switch to a specific desktop. To use this, # must be specified in the key section. The number 1 to the number of desktops configured then gets substituted for #. πŸ”„
  • rdesktop β€” move one desktop to the right.
  • ldesktop β€” move one desktop to the left.
  • udesktop β€” move up one desktop.
  • ddesktop β€” move down one desktop.
  • showdesktop β€” show/hide the desktop (maximize/minimize all windows). The panic-cleanup button 🧹
  • showtray β€” unhide the tray (when using autohide).
  • exec:command β€” execute command.
  • restart β€” restart JWM.
Okay important: there are no default key bindings. None. Zero. You build your own kingdom πŸ‘‘ And yes, it's possible to bind multiple key combinations to the same action. Go off. πŸ’–

✨ MOUSE BINDINGS ✨

Mouse bindings get configured with Mouse tags. Here's the breakdown:

  • context attribute β†’ the context in which the binding applies
  • button attribute β†’ the mouse button
  • mask attribute (optional) β†’ the key mask that must be in effect for the binding to match
  • the text of the Mouse tag β†’ the action to perform (peep KEY BINDINGS for the full list of actions)

The button is a mouse button number, starting at 1 (that's typically the left button). A positive value for the button means the action applies on mouse press, and a negative value means it applies on release. And the button number can be repeated to bind to double clicks. πŸ‘†πŸ‘†

The following mouse contexts are supported:

  • border β€” the window border.
  • close β€” the close button on a window.
  • icon β€” the icon button on a window.
  • maximize β€” the maximize button on a window.
  • minimize β€” the minimize button on a window.
  • root β€” the root window.
  • title β€” the title bar of a window. that's the vibe, bestie πŸ’…

Other bindings πŸ‘€

  • Button 1 (typically the left button) β€” over a task bar, restores or minimizes the window. over a pager, switches the active desktop. πŸ–±οΈ
  • Button 2 (typically the middle button) β€” over a task bar, closes the window. over a pager, switches the active desktop. ✨
  • Button 3 (typically the right button) β€” over a task bar, shows the window menu. over a pager, dragging while holding button 3 will move a window. 🫢

When a menu is open, the scroll wheel will move through menu items. When over the pager, the scroll wheel will switch desktops. When over a task list, the scroll wheel will switch windows. scroll wheel really said "I contain multitudes" 😭


πŸͺ DESKTOPS πŸͺ

Virtual desktops are controlled with the Desktops tag. Within this tag the following attribute is supported:

  • width int β€” the number of virtual desktops in the horizontal direction. the default is 4. 🌈
  • height int β€” the number of virtual desktops in the vertical direction. the default is 1.
  • backandforth string β€” controls whether changing the desktop to the currently active desktop using the desktop# action should instead switch to the previously active desktop. default is "off" to do nothing when switching to the currently active desktop. possible values are "on" and "off". lowkey a whole plot twist πŸŽ€

Within the Desktops tag the following tags are supported:

  • Background β€” the default background for desktops. the type attribute determines the type of background and the text contained within this tag is the value. valid types are:
    • solid β€” a solid color. see the COLORS section for more information. this is the default. ⭐
    • gradient β€” a gradient color. see the COLORS section for more information.
    • image β€” a stretched image. this may be an XPM, PNG, or JPEG image. note that support for XPM, PNG, and JPEG images must be compiled in and icon support is required. πŸ‘‘
    • tile β€” a tiled image. like image, but the image is tiled instead of stretched.
    • scale β€” a scaled image. like image, but the aspect ratio of the image is preserved. ate πŸ’…
    • command β€” a command to run for setting the background.
  • Desktop β€” desktop-specific data. the name attribute may be specified to name the desktop (the default is the desktop number). within this tag a Background tag may be specified for a desktop-specific background. see Background above for more information. 🌸

🌟 OTHER SETTINGS 🌟

The following tags may also be supplied:

  • ButtonClose β€” an icon to display for the close button on client windows instead of the default.
  • ButtonCloseFocus β€” an icon to display for the close button on active client windows instead of the default.
  • ButtonMax β€” an icon to display for the maximize button on client windows instead of the default.
  • ButtonMaxFocus β€” an icon to display for the maximize button on active client windows instead of the default.
  • ButtonMaxActive β€” an icon to display for the maximize button on maximized client windows instead of the default.
  • ButtonMaxActiveFocus β€” an icon to display for the maximize button on active maximized client windows instead of the default.
  • ButtonMenu β€” an icon to display for the menu button on client windows instead of the default. this is used for client windows that do not specify an icon.
  • ButtonMenuFocus β€” an icon to display for the menu button on active client windows instead of the default. this is used for client windows that do not specify an icon.
  • ButtonMin β€” an icon to display for the minimize button on client windows instead of the default.
  • ButtonMinFocus β€” an icon to display for the minimize button on active client windows instead of the default.
  • DefaultIcon β€” an icon to display for windows that do not specify an icon. πŸ¦‹
  • DoubleClickDelta β€” the number of pixels the mouse can move during a double click. the default is 2. valid values are between 0 and 32 inclusive.
  • DoubleClickSpeed β€” the maximum number of milliseconds between clicks for a double click. the default is 400. valid values are between 1 and 2000 inclusive. ✨
  • FocusModel β€” the focus model to be used. the default is "sloppy". valid values are:
    • click β€” click to focus and raise.
    • clicktitle β€” click to focus. click the title bar to raise.
    • sloppy β€” focus follows mouse. click to raise.
    • sloppytitle β€” focus follows mouse. click the title bar to raise.
  • MoveMode β€” the move mode. the default is "opaque". valid values are "opaque" and "outline". this tag supports the following attributes:
    • coordinates { off | corner | window | screen } β€” the location of the status window. the default is screen.
    • delay int β€” the delay in milliseconds before moving a window to a different desktop. setting this to 0 disables dragging windows between desktops. the default is 1000. πŸ’€
    • mask string β€” the key mask of the modifier that, when held, allows one to move the window by dragging it. the default is "A".
  • ResizeMode β€” the resize mode. the default is "opaque". valid values are "opaque" and "outline". the optional coordinates attribute determines the location of the move status window. possible values are: this tag supports the following attribute:
    • coordinates { off | corner | window | screen } β€” the location of the status window. the default is screen.
  • RestartCommand β€” a command to run when JWM restarts. πŸ”₯
  • SnapMode β€” the snap mode. the default is "border". valid values are "none" (for no snapping), "screen" (for snapping to the edge of the screen), and "border" (for snapping to the borders of windows and the screen). an optional attribute, distance, specifies the distance for snapping. the default is 5. valid values are between 1 and 32 inclusive. 🧚
  • StartupCommand β€” a command to run when JWM starts. 🌈
  • ShutdownCommand β€” a command to run when JWM exits.
  • TitleButtonOrder β€” change the order of buttons in title bars. this is a string of zero or more of the following characters to determine the order of items in the window title bar:
    • m β€” maximize button
    • i β€” minimize (iconify) button
    • t β€” window title
    • w β€” window menu button
    • x β€” close button

mix and match them however you want, it's giving custom ✨


πŸ’– AUTHOR πŸ’–

Joe Wingbermuehle <joewing@joewing.net> β€” icon, legend, the moment πŸ‘‘


πŸ‘€ SEE ALSO πŸ‘€

  • X(1)

and that's a wrap on the whole thing, bestie πŸŽ€ this page was v2.4.6, dated 2025-02-08, and yeah it's jwm(1) β€” you now know more about window management than most people will in a lifetime. go touch some virtual desktops. slay πŸ’…βœ¨

πŸ“¦ where this page comes from