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 π
-displaydisplay β says which display to use, bestie. seeX(1)if you need the lore.-exitβ bounces JWM out by sending_JWM_EXITto the root window. bye babes π«‘-ffile β 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_RESTARTto the root window.-reloadβ reloads menus by sending_JWM_RELOADto 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:
onrootlist β 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 is0to9inclusive as well asatozinclusive, providing for up to 36 menus. Note that only the numeric values map to mouse buttons.heightint β Height of each menu item in pixels.0indicates the largest menu item will determine the height. The default is0.labeledbool β Determines if a label appears at the top of the menu. Default isfalse.labelstring β The label to display at the top of the menu. Default is"JWM".dynamicstring β A dynamically loaded menu. If the text starts withexec:, the output of the specified program is used.
Within the RootMenu tag, the following tags are supported:
πΈ Menu πΈ
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:
heightint β Height of each menu item in pixels.0indicates the largest menu item will determine the height. The default is inherited from the parent menu.labelstring β The label to use. No default.tooltipstring β A tooltip to display. No default.iconstring β The icon to use for this menu. No default.labeledbool β Determines if a label appears at the top of the menu. Default isfalse.
π¦ 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:
labelstring β The label to display. Default is the text of the tag.tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use for the menu. The default is"Desktops".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"SendTo".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Stick".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Maximize".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Minimize".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Shade".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Move".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Resize".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Kill".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β The label to use. The default is"Close".tooltipstring β A tooltip to display. No default.iconstring β 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:
labelstring β the label you wanna use. default is"Restart".tooltipstring β a lil tooltip to show. no default.iconstring β 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:
labelstring β The label to use. The default is"Exit".tooltipstring β A tooltip to display. No default.iconstring β The icon to use. No default.confirmbool β Determine if a confirm dialog appears before exiting. Default istrue.
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:
autohidestring β 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).delayint β The delay before hiding the tray in milliseconds. Default is0milliseconds.xint β The x-coordinate of the tray. This may be negative to indicate an offset from the right of the screen.yint β The y-coordinate of the tray. This may be negative to indicate an offset from the bottom of the screen.widthint β The width of the tray.0indicates that the tray should compute an optimal width depending on what it contains and the layout. A negative value subtracts from the screen width.0is the default.heightint β The height of the tray.0indicates that the tray should compute an optimal height depending on what it contains and the layout. A negative value subtracts from the screen height.0is the default.screenint β The index of the screen on which to start the tray.0is the default (the primary screen).layer{ below | normal | above }β The layer of the tray. The default isabove.layout{ vertical | horizontal }β The layout of the tray. The default ishorizontal.valign{ fixed | top | center | bottom }β The vertical alignment of the tray. The default isfixed.halign{ fixed | left | center | right }β The horizontal alignment of the tray. The default isfixed.
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 defaultTrayButtonaction isroot:1.exec:string β Execute a command.showdesktopβ Minimize all windows on the current desktop.
This tag supports the following attributes:
formatstring β The format of the clock. Seestrftime(3).zonestring β The time zone of the clock. Seetzset(3).widthint β The width of the clock.0indicates that the width should be determined from the length of the text to be displayed.heightint β The height of the clock.0indicates 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:
widthint β The maximum width of an item contained in the dock. This defaults to the width or height of the tray (whichever is smaller).spacingint β The spacing of items contained in the dock (in pixels). This defaults to0.
πΊοΈ 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:
labeledbool β Determines if the pager has text labels. Default isfalse.
Also see the PAGER STYLE section for more information.
πͺ Spacer πͺ
Add empty space to the tray. This tag supports the following attributes:
widthint β The width of the spacer (0to fill all available space).0is the default.heightint β The height of the spacer (0to fill all available space).0is 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:
namestring β The name of the program to swallow. This attribute is required.widthint β The width of the swallowed program.0indicates that the width should be determined from the tray and size requested from the program.0is the default.heightint β The height of the swallowed program.0indicates that the height should be determined from the tray and the size requested from the program.0is the default.
π TaskList π
Add a task list to the tray. This tag supports the following attributes:
heightint β The height of an item in the task list.0indicates that the height should be taken from the tray. The default is0.labeledbool β Determines if a label is shown for items in the task list. The default istrue.labelposstring β 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.maxwidthint β The maximum width of an item in the task list.0indicates no maximum. The default is0.
π 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 defaultTrayButtonaction isroot:1.exec:string β Execute a command.showdesktopβ Minimize all windows on the current desktop.
This tag supports the following attributes:
labelstring β A label to display. No default.popupstring β A string to be displayed for a popup. This will default to the value specified forlabel, if provided. If neitherpopupnorlabelare specified no popup will be shown.iconstring β 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
Nametags, then at least one of those names has to match. No partial credit, periodt. - Same deal with
Classβ one or moreClasstags means at least one class has to match. - JWM does its matching with extended POSIX regular expressions for both
NameandClasstags. Go peek atregex(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 inWM_CLASS).Classβ the window class of a program that has to match for it to be in this group (that's the second string inWM_CLASS).Typeβ the window type a program has to be to match this group. The possible values aredesktop,dialog,dock,menu,normal,notification,splash,toolbar,utility.Machineβ the machine a program runs on for it to match this group (that's theWM_CLIENT_MACHINEstring).Titleβ the window title a program needs to match to be in this group (the string inWM_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 withnolist, 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 withnopager, 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 arebelow,normal, andabove.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β disablemod1+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 between0.0and1.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) orcenteredif 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 areflatandmotif.flatis the default.showclientβ include the X client machine name (WM_CLIENT_MACHINE) in the window title. Valid options aretrueandfalse.falseis 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 areleft,right, andcenter.leftis the default.
Widthβ the width of window borders in pixels. The default is4, the minimum is1, and the maximum is128.Heightβ the height of window title bars in pixels. By default this is set to the size of the title font. The minimum is1, and the maximum is256.Cornerβ the corner width of the window border for rounded window borders. The default is4, the minimum is0(rectangular), and the maximum is5(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 iswhite.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 between0.0and1.0. The default is1.0. Heads up: a composite manager, likexcompmgr, is required for this πOutlineβ the color of the window outline. The default is a darkened version of the window background. Ifmotifwindow 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 iswhite.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 between0.0and1.0. The default is0.75. Also needs a composite manager, likexcompmgr, 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 areflatandmotif. The default isflat. 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 between0.0and1.0. Heads up bestie: a composite manager likexcompmgris 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 areflatandmotif. The default is inherited fromTrayStyleπgroupβ determines if windows get grouped by class when they show up in task bars. Possible values aretrueandfalse. The default isfalse.listβ determines which windows actually show in task bars. Possible values aredesktopandall. The default isdesktop.showkillβ determines if the Kill popup menu item is shown on task bars and window title bars. Possible values aretrueandfalse. The default istrue. π
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.
π½οΈ MENU STYLE π½οΈ
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 areflatandmotif. The default isflat.
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. π
β¨ POPUP STYLE β¨
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:
delayint β how long, in milliseconds, before popups activate. Default is600. Patience is a virtue ig πenabledstring β 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), andtask(task list items). Default istrueβ¨
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 isblack. π€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
#FF0000is 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β ControlSβ Shift1β mod12β mod23β mod34β mod45β 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 number1to 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 sideresize:sβ resize the south sideresize:eβ resize the east sideresize:wβ resize the west sideresize:nwβ resize the north-west cornerresize:neβ resize the north-east cornerresize:swβ resize the south-west cornerresize:seβ resize the south-east corner
centerβ center the current window.root:nβ show root menun.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 number1to 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β executecommand.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:
contextattribute β the context in which the binding appliesbuttonattribute β the mouse buttonmaskattribute (optional) β the key mask that must be in effect for the binding to match- the text of the
Mousetag β 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:
widthint β the number of virtual desktops in the horizontal direction. the default is4. πheightint β the number of virtual desktops in the vertical direction. the default is1.backandforthstring β controls whether changing the desktop to the currently active desktop using thedesktop#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. thetypeattribute 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. likeimage, but the image is tiled instead of stretched.scaleβ a scaled image. likeimage, but the aspect ratio of the image is preserved. ate πcommandβ a command to run for setting the background.
Desktopβ desktop-specific data. thenameattribute may be specified to name the desktop (the default is the desktop number). within this tag aBackgroundtag may be specified for a desktop-specific background. seeBackgroundabove 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 is2. valid values are between0and32inclusive.DoubleClickSpeedβ the maximum number of milliseconds between clicks for a double click. the default is400. valid values are between1and2000inclusive. β¨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 isscreen.delayint β the delay in milliseconds before moving a window to a different desktop. setting this to0disables dragging windows between desktops. the default is1000. πmaskstring β 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 optionalcoordinatesattribute 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 isscreen.
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 is5. valid values are between1and32inclusive. π§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 buttoniβ minimize (iconify) buttontβ window titlewβ window menu buttonxβ 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
- debian trixie: jwm 2.4.6-2 Β· MIT
- ubuntu questing: jwm 2.4.6-2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms