1 .\" Copyright (c) 2009-2012 Marco Peereboom <marco@peereboom.us>
2 .\" Copyright (c) 2009 Darrin Chandler <dwchandler@stilyagin.com>
3 .\" Copyright (c) 2011-2012 Reginald Kennedy <rk@rejii.com>
4 .\" Copyright (c) 2011-2012 Lawrence Teo <lteo@lteo.net>
5 .\" Copyright (c) 2011-2012 Tiago Cunha <tcunha@gmx.com>
6 .\" Copyright (c) 2012 David Hill <dhill@mindcry.org>
8 .\" Permission to use, copy, modify, and distribute this software for any
9 .\" purpose with or without fee is hereby granted, provided that the above
10 .\" copyright notice and this permission notice appear in all copies.
12 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 .Dd $Mdocdate: February 15 2012 $
25 .Nd window manager for X11
30 is a minimalistic window manager that tries to stay out of the way so that
31 valuable screen real estate can be used for much more important stuff.
32 It has sane defaults and does not require one to learn a language to do any
34 It was written by hackers for hackers and it strives to be small, compact and
39 starts up, it reads settings from its configuration file,
42 .Sx CONFIGURATION FILES
45 The following notation is used throughout this page:
47 .Bl -tag -width Ds -offset indent -compact
61 is very simple in its use.
62 Most of the actions are initiated via key or mouse bindings.
65 section below for defaults and customizations.
66 .Sh CONFIGURATION FILES
68 first tries to open the user specific file,
69 .Pa ~/.spectrwm.conf .
70 If that file is unavailable,
71 it then tries to open the global configuration file
72 .Pa /etc/spectrwm.conf .
74 The format of the file is \*(Ltkeyword\*(Gt = \*(Ltsetting\*(Gt.
79 Enabling or disabling an option is done by using 1 or 0 respectively.
81 Colors need to be specified per the
85 The file supports the following keywords:
88 Launch an application in a specified workspace at start-of-day.
89 Defined in the format ws[<idx>]:application, e.g. ws[2]:xterm launches an
92 External script that populates additional information in the status bar,
95 Place the statusbar at the bottom of each region instead of the top.
96 .It Ic bar_border Ns Bq Ar x
97 Border color of the status bar(s) in screen
99 .It Ic bar_border_width
100 Set status bar border thickness in pixels.
101 Disable border by setting to 0.
102 .It Ic bar_color Ns Bq Ar x
103 Background color of the status bar(s) in screen
109 .It Ic bar_enabled_ws Ns Bq Ar x
116 Font used in the status bar. Either Xft or X Logical Font Description (XLFD)
117 may be used to specify fonts. Fallback fonts may be specified by separating
118 each font with a comma. If all entries are XLFD syntax, font set will be
119 used. If at least one entry is Xft, Xft will be used. Note that if Xft is in
120 use, only the first font that successfully loads will be used regardless of
121 missing glyphs. The default is to use font set. Also note that dmenu does
122 not support Xft fonts.
125 .Bd -literal -offset indent
126 bar_font = Terminus:style=Regular:pixelsize=14:antialias=true
128 bar_font = -*-profont-medium-*-*-*-11-*-*-*-*-*-*-*,Terminus:pixelsize=14,\
129 -*-clean-medium-*-*-*-12-*-*-*-*-*-*-*
133 .Bd -literal -offset indent
134 bar_font = -*-terminus-medium-*-*-*-14-*-*-*-*-*-*-*
136 bar_font = -*-profont-medium-*-*-*-11-*-*-*-*-*-*-*,\
137 -*-terminus-medium-*-*-*-14-*-*-*-*-*-*-*,\
138 -*-clean-medium-*-*-*-12-*-*-*-*-*-*-*
141 To list the available fonts in your system see
148 application can help with the XLFD setting.
150 .It Ic bar_font_color Ns Bq Ar x
151 Color of the font in status bar in screen
154 Set the bar_format string and overrides
159 The format is passed through
162 It may contain the following character sequences:
163 .Bl -column "Character sequence" "Replaced with" -offset indent
164 .It Sy "Character sequence" Ta Sy "Replaced with"
165 .It Li "+<" Ta "Pad with a space"
166 .It Li "+A" Ta "Output of the external script"
167 .It Li "+C" Ta "Window class"
168 .It Li "+D" Ta "Workspace name"
169 .It Li "+F" Ta "Floating indicator"
170 .It Li "+I" Ta "Workspace index"
171 .It Li "+N" Ta "Screen number"
172 .It Li "+P" Ta "Window class and title separated by a colon"
173 .It Li "+S" Ta "Stacking algorithm"
174 .It Li "+T" Ta "Window title"
175 .It Li "+U" Ta "Urgency hint"
176 .It Li "+V" Ta "Program version"
177 .It Li "+W" Ta "Window name"
178 .It Li "++" Ta "A literal" Ql +
181 All character sequences may limit its output to a specific length, for
182 example +64A. Any characters that don't match the specification are copied
185 Justify the status bar text. Possible values are
191 Note that if the output is not
193 justified, it may not be properly aligned in some circumstances, due to the
194 white-spaces in the default static format.
197 option for more details.
198 .It Ic bind Ns Bq Ar x
199 Bind key combo to action
205 Set window border thickness in pixels.
206 Disable all borders by setting to 0.
208 Enable or disable displaying the clock in the status bar.
209 Disable by setting to 0
210 so a custom clock could be used in the
214 Border color of the currently focussed window.
216 Border color of unfocussed windows.
218 Some applications have dialogue windows that are too small to be useful.
219 This ratio is the screen size to what they will be resized.
220 For example, 0.6 is 60% of the physical screen size.
221 .It Ic disable_border
222 Remove border when bar is disabled and there is only one window on the
225 Window to put focus when the focused window is closed.
235 are relative to the window that is closed.
236 .It Ic focus_close_wrap
237 Whether to allow the focus to jump to the last window when the first window
238 is closed or vice versa. Disable by setting to 0.
240 Window to put focus when no window has been focused. Possible values are
246 Window focus behavior with respect to the mouse cursor. Possible values:
248 .Bl -tag -width "default" -offset indent -compact
250 Set window focus on border crossings caused by cursor motion and
253 Set window focus on all cursor border crossings, including workspace switches
254 and changes to layout.
256 Set window focus on window interaction only.
258 .It Ic keyboard_mapping
259 Clear all key bindings and load new key bindings from the specified file.
260 This allows you to load pre-defined key bindings for your keyboard layout.
262 .Sx KEYBOARD MAPPING FILES
263 section below for a list of keyboard mapping files that have been provided
264 for several keyboard layouts.
266 Select layout to use at start-of-day. Defined in the format
267 ws[idx]:master_grow:master_add:stack_inc:layout:always_raise:stack_mode, e.g.
268 ws[2]:-4:0:1:0:horizontal sets worskspace 2 to the horizontal stack mode and
269 shrinks the master area by 4 ticks and adds one window to the stack, while
270 maintaining default floating window behavior.
271 Possible stack_mode values are
288 for more information.
289 Note that the stacking options are complicated and have side-effects. One
290 should familiarize oneself with these commands before experimenting with the
294 This setting is not retained at restart.
297 Mod1 is generally the ALT key and Mod4 is the windows key on a PC.
298 .It Ic program Ns Bq Ar p
299 Define new action to spawn a program
304 .It Ic quirk Ns Bq Ar c:n
305 Add "quirk" for windows with class
313 Allocates a custom region, removing any autodetected regions which occupy the
314 same space on the screen.
315 Defined in the format screen[<idx>]:WIDTHxHEIGHT+X+Y,
316 e.g.\& screen[1]:800x1200+0+0.
318 To make a region span multiple monitors, create a region big enough to cover
319 them all, e.g. screen[1]:2048x768+0+0 makes the region span two monitors with
320 1024x768 resolution sitting one next to the other.
321 .It Ic spawn_position
322 Position in stack to place newly spawned windows.
333 are relative to the focused window.
335 Enable or disable displaying the current stacking algorithm in the status
338 Set a preferred minimum width for the terminal.
339 If this value is greater than 0,
341 will attempt to adjust the font sizes in the terminal to keep the terminal
342 width above this number as the window is resized.
345 is currently supported.
348 binary must not be setuid or setgid, which it is by default on most systems.
349 Users may need to set program[term] (see the
351 section) to use an alternate copy of the
353 binary without the setgid bit set.
354 .It Ic title_class_enabled
355 Enable or disable displaying the window class in the status bar.
356 Enable by setting to 1.
357 .It Ic title_name_enabled
358 Enable or disable displaying the window title in the status bar.
359 Enable by setting to 1.
360 .It Ic urgent_enabled
361 Enable or disable the urgency hint.
362 Note that many terminal emulators require this to be enabled for it to
364 In xterm, for example, one needs to add the following line
365 .Pa xterm.bellIsUrgent: true
368 .It Ic verbose_layout
369 Enable or disable displaying the current master and stack values in the
370 status bar. Enable by setting to 1.
371 .It Ic window_name_enabled
372 Enable or disable displaying the window name in the status bar.
373 Enable by setting to 1.
375 To prevent excessively large window names from pushing the remaining text off
376 the bar, it's limited to 64 characters, by default.
379 option for more details.
380 .It Ic workspace_limit
381 Set the total number of workspaces available. Minimum is 1, maximum is 22,
386 allows you to define custom actions to launch programs of your choice and
387 then bind them the same as with built-in actions.
392 The default programs are described below:
394 .Bl -tag -width "screenshot_wind" -offset indent -compact
397 .It Cm screenshot_all
399 .It Cm screenshot_wind
406 dmenu_run \-fn $bar_font \-nb $bar_color \-nf $bar_font_color \-sb
407 $bar_border \-sf $bar_color
410 Custom programs in the configuration file are specified as follows:
412 .Dl program[<name>] = <progpath> [<arg> [... <arg>]]
415 is any identifier that does not conflict with a built-in action or keyword,
417 is the desired program, and
419 is zero or more arguments to the program.
421 The following variables represent settable values in
424 .Sx CONFIGURATION FILES
426 and may be used in the
428 fields and will be substituted for values at the time the program is spawned:
430 .Bl -tag -width "$bar_font_color" -offset indent -compact
434 .It Cm $bar_font_color
436 .It Cm $color_unfocus
440 .Bd -literal -offset indent
441 program[ff] = /usr/local/bin/firefox http://spectrwm.org/
442 bind[ff] = Mod+Shift+b # Now Mod+Shift+B launches firefox
445 To undo the previous:
446 .Bd -literal -offset indent
452 provides many functions (or actions) accessed via key or mouse bindings.
454 The current mouse bindings are described below:
456 .Bl -tag -width "M-j, M-<TAB>XXX" -offset indent -compact
464 Resize window while maintaining it centered
467 The default key bindings are described below:
469 .Bl -tag -width "M-j, M-<TAB>XXXXXX" -offset indent -compact
470 .It Cm M-S- Ns Aq Cm Return
478 .It Cm M- Ns Aq Cm Space
480 .It Cm M-S- Ns Aq Cm \e
482 .It Cm M-S- Ns Aq Cm Space
496 .It Cm M- Ns Aq Cm Return
505 .Cm M-S- Ns Aq Cm TAB
522 .It Cm M- Ns Aq Ar 1-9,0,F1-F12
524 .It Cm M-S- Ns Aq Ar 1-9,0,F1-F12
525 .Pf mvws_ Ns Aq Ar 1-22
526 .It Cm M- Ns Aq Ar Keypad 1-9
528 .It Cm M-S- Ns Aq Ar Keypad 1-9
530 .It Cm M- Ns Aq Cm Right
532 .It Cm M- Ns Aq Cm Left
534 .It Cm M- Ns Aq Cm Up
536 .It Cm M- Ns Aq Cm Down
540 .It Cm M-S- Ns Aq Cm Right
542 .It Cm M-S- Ns Aq Cm Left
552 .It Cm M-S- Ns Aq Cm Delete
588 The action names and descriptions are listed below:
590 .Bl -tag -width "M-j, M-<TAB>XXXX" -offset indent -compact
610 Swap the master and stacking areas.
618 Add windows to master area.
620 Remove windows from master area.
622 Add columns/rows to stacking area.
624 Remove columns/rows from stacking area.
626 Move current window to master area.
628 Focus next window in workspace.
630 Focus previous window in workspace.
632 Focus on main window in workspace.
634 Swap with next window in workspace.
636 Swap with previous window in workspace.
638 Toggle overall visibility of status bars.
640 Toggle status bar on current workspace.
642 Delete current window in workspace.
644 Destroy current window in workspace.
650 is 1 through workspace_limit.
652 Move current window to workspace
656 is 1 through workspace_limit.
664 Move current window to region
670 Switch to next workspace with a window in it.
672 Switch to previous workspace with a window in it.
674 Switch to next workspace.
676 Switch to previous workspace.
678 Switch to last visited workspace.
680 Switch to next region.
682 Switch to previous region.
683 .It Cm screenshot_all
684 Take screenshot of entire screen (if enabled)
688 .It Cm screenshot_wind
689 Take screenshot of selected window (if enabled)
694 Toggle version in status bar.
696 Toggle focused window between tiled and floating.
703 Reinitialize physical screens
708 Minimize (unmap) currently focused window.
710 Maximize (map) window returned by dmenu selection.
712 When set tiled windows are allowed to obscure floating windows.
714 Fake a middle mouse button click (mouse button 2).
716 Shrink the width of a floating window.
718 Grow the width of a floating window.
720 Shrink the height of a floating window.
722 Grow the height of a floating window.
724 Move a floating window a step to the left.
726 Move a floating window a step to the right.
728 Move a floating window a step upwards.
730 Move a floating window a step downwards.
731 .It Cm name_workspace
732 Name the current workspace.
733 .It Cm search_workspace
734 Search for a workspace.
736 Search the windows in the current workspace.
739 Custom bindings in the configuration file are specified as follows:
741 .Dl bind[<action>] = <keys>
744 is one of the actions listed above (or empty) and
746 is in the form of zero or more modifier keys
747 (MOD, Mod1, Shift, etc.) and one or more normal keys
748 (b, space, etc.), separated by "+".
750 .Bd -literal -offset indent
751 bind[reset] = Mod4+q # bind Windows-key + q to reset
752 bind[] = Mod1+q # unbind Alt + q
755 To use the currently defined
757 specify MOD as the modifier key.
759 Multiple key combinations may be bound to the same action.
761 To bind non-latin characters such as å or π you must enter the xkb
762 character name instead of the character itself. Run xev, focus the window
763 and press the specific key and in the terminal output read the symbol name.
764 In the fallowing example for å:
765 .Bd -literal -offset indent
766 KeyPress event, serial 41, synthetic NO, window 0x2600001,
767 root 0x15a, subw 0x0, time 106213808, (11,5), root:(359,823),
768 state 0x0, keycode 24 (keysym 0xe5, aring), same_screen YES,
769 XLookupString gives 2 bytes: (c3 a5) "å"
770 XmbLookupString gives 2 bytes: (c3 a5) "å"
771 XFilterEvent returns: False
774 The xkb name is aring. In other words, in .spectrwm.conf add:
775 .Bd -literal -offset indent
776 bind[program] = MOD+aring
778 .Sh KEYBOARD MAPPING FILES
779 Keyboard mapping files for several keyboard layouts are listed
781 These files can be used with the
783 setting to load pre-defined key bindings for the specified
786 .Bl -tag -width "spectrwm_XX.confXXX" -offset indent -compact
787 .It Cm spectrwm_cz.conf
788 Czech Republic keyboard layout
789 .It Cm spectrwm_es.conf
790 Spanish keyboard layout
791 .It Cm spectrwm_fr.conf
792 French keyboard layout
793 .It Cm spectrwm_fr_ch.conf
794 Swiss French keyboard layout
795 .It Cm spectrwm_se.conf
796 Swedish keyboard layout
797 .It Cm spectrwm_us.conf
798 United States keyboard layout
802 provides "quirks" which handle windows that must be treated specially
803 in a tiling window manager, such as some dialogs and fullscreen apps.
805 The default quirks are described below:
807 .Bl -tag -width "OpenOffice.org N.M:VCLSalFrame<TAB>XXX" -offset indent \
809 .It Firefox\-bin:firefox\-bin
816 FLOAT + FULLSCREEN + FOCUSPREV
817 .It OpenOffice.org 2.4:VCLSalFrame
819 .It OpenOffice.org 3.1:VCLSalFrame
827 .It xine:xine Video Fullscreen Window
837 The quirks themselves are described below:
839 .Bl -tag -width "XTERM_FONTADJ<TAB>XXX" -offset indent -compact
841 This window should not be tiled, but allowed to float freely.
843 Adjusts size on transient windows that are too small using dialog_ratio
845 .Sx CONFIGURATION FILES ) .
847 Allow window to position itself, uncentered.
849 Adjust xterm fonts when resizing.
851 Remove border to allow window to use full region size.
853 On exit force focus on previously focused application not previous
854 application in the stack.
857 Custom quirks in the configuration file are specified as follows:
859 .Dl quirk[<class>:<name>] = <quirk> [ + <quirk> ... ]
864 specify the window to which the quirk(s) apply, and
866 is one of the quirks from the list above.
868 .Bd -literal -offset indent
869 quirk[MPlayer:xv] = FLOAT + FULLSCREEN + FOCUSPREV
870 quirk[pcb:pcb] = NONE # remove existing quirk
879 and then clicking on the desired window.
880 In the following example the main window of Firefox was clicked:
881 .Bd -literal -offset indent
882 $ xprop | grep WM_CLASS
883 WM_CLASS(STRING) = "Navigator", "Firefox"
886 Note that grepping for WM_CLASS flips class and name.
887 In the example above the quirk entry would be:
888 .Bd -literal -offset indent
889 quirk[Firefox:Navigator] = FLOAT
893 also automatically assigns quirks to windows based on the value
894 of the window's _NET_WM_WINDOW_TYPE property as follows:
896 .Bl -tag -width "_NET_WM_WINDOW_TYPE_TOOLBAR<TAB>XXX" -offset indent -compact
897 .It _NET_WM_WINDOW_TYPE_DOCK
899 .It _NET_WM_WINDOW_TYPE_TOOLBAR
901 .It _NET_WM_WINDOW_TYPE_UTILITY
903 .It _NET_WM_WINDOW_TYPE_SPLASH
905 .It _NET_WM_WINDOW_TYPE_DIALOG
909 In all other cases, no automatic quirks are assigned to the window.
910 Quirks specified in the configuration file override the automatic quirks.
913 partially implements the Extended Window Manager Hints (EWMH) specification.
914 This enables controlling windows as well as
916 itself from external scripts and programs.
919 responding to certain ClientMessage events.
920 From the terminal these events
921 can be conveniently sent using tools such as
926 actual format of these ClientMessage events, see the EWMH specification.
928 The id of the currently focused window is stored in the _NET_ACTIVE_WINDOW
929 property of the root window.
930 This can be used for example to retrieve the
931 title of the currently active window with
935 .Bd -literal -offset indent
936 $ WINDOWID=`xprop \-root _NET_ACTIVE_WINDOW | grep \-o "0x.*"`
937 $ xprop \-id $WINDOWID WM_NAME | grep \-o "\\".*\\""
940 A window can be focused by sending a _NET_ACTIVE_WINDOW client message
945 (assuming 0x4a0000b is the id of the window to be focused):
946 .Bd -literal -offset indent
947 $ wmctrl \-i \-a 0x4a0000b
950 Windows can be closed by sending a _NET_CLOSE_WINDOW client message
955 (assuming 0x4a0000b is the id of the window to be closed):
956 .Bd -literal -offset indent
957 $ wmctrl \-i \-c 0x4a0000b
960 Windows can be floated and un-floated by adding or removing the
961 _NET_WM_STATE_ABOVE atom from the _NET_WM_STATE property of the window.
962 This can be achieved by sending a _NET_WM_STATE client message to the
964 For example, the following toggles the floating state of
967 to send the message (assuming 0x4a0000b is the id of the window floated
969 .Bd -literal -offset indent
970 $ wmctrl \-i \-r 0x4a0000b \-b toggle,_NET_WM_STATE_ABOVE
973 Floating windows can also be resized and moved by sending a
974 _NET_MOVERESIZE_WINDOW client message to the root window.
978 to send the message (assuming 0x4a0000b is the id of
979 the window to be resize/moved):
980 .Bd -literal -offset indent
981 $ wmctrl \-i \-r 0x4a0000b \-e 0,100,50,640,480
984 This moves the window to (100,50) and resizes it to 640x480.
986 Any _NET_MOVERESIZE_WINDOW events received for stacked windows are ignored.
990 a HUP signal will restart it.
992 .Bl -tag -width "/etc/spectrwm.confXXX" -compact
993 .It Pa ~/.spectrwm.conf
995 user specific settings.
996 .It Pa /etc/spectrwm.conf
1002 was inspired by xmonad & dwm.
1008 .Bl -tag -width "Ryan Thomas McBride Aq mcbride@countersiege.com " -offset \
1010 .It Cm Marco Peereboom Aq marco@peereboom.us
1011 .It Cm Ryan Thomas McBride Aq mcbride@countersiege.com
1012 .It Cm Darrin Chandler Aq dwchandler@stilyagin.com
1013 .It Cm Pierre-Yves Ritschard Aq pyr@spootnik.org
1014 .It Cm Tuukka Kataja Aq stuge@xor.fi
1015 .It Cm Jason L. Wright Aq jason@thought.net
1016 .It Cm Reginald Kennedy Aq rk@rejii.com
1017 .It Cm Lawrence Teo Aq lteo@lteo.net
1018 .It Cm Tiago Cunha Aq tcunha@gmx.com
1019 .It Cm David Hill Aq dhill@mindcry.org