1 ![logo](https://github.com/baskerville/bspwm/raw/master/logo/bspwm-logo.png)
5 `bspwm` is a tiling window manager based on binary space partitioning.
7 The windows are represented as the leaves of a binary tree.
11 `bspwm` have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
13 Those messages are sent via `bspc`.
15 If the `BSPWM_SOCKET` environment variable is defined, it will be used as the socket path, otherwise `/tmp/bspwm-socket` is used.
17 The recommended way of defining keyboard shortcuts is to use `xbindkeys`.
19 The only way to configure `bspwm` is by sending *set* messages via the client, hence `bspwm`'s configuration file is an executable called `autostart` which lives in `$XDG_CONFIG_HOME/bspwm/`.
21 Example configurations: [autostart](https://github.com/baskerville/bin/blob/master/bspwm_autostart) and [xbindkeysrc](https://github.com/baskerville/dotfiles/blob/master/xbindkeysrc).
25 There is only two splitting modes: *automatic* and *manual*.
27 The default mode is *automatic*. The *manual* mode is entered by sending a *presel* message.
29 Example: insertion of a new node (number 4) into the given tree in
39 +-------------------------+ +-------------------------+
43 | 3 |------------| --> | 4 |------------|
47 +-------------------------+ +-------------------------+
49 Same departure, but the mode is *manual*, and a `presel up` message
58 +-------------------------+ +-------------------------+
62 | 3 |------------| --> |------------|------------|
66 +-------------------------+ +-------------------------+
70 The syntax for the client is `bspc MESSAGE [ARGUMENTS ...]`.
72 The following messages are handled:
75 Return the value of the given setting.
78 Set the value of the given setting.
81 Output the internal representation of the window tree.
83 list_desktops [--quiet]
84 Perform a dump of each desktop for the current monitor.
86 list_monitors [--quiet]
87 Perform a dump of each monitor.
90 Return the list of managed windows (i.e. their identifiers).
92 presel left|right|up|down
93 Switch to manual mode and select the splitting direction.
96 Switch to automatic mode.
99 Set the splitting ratio of the focused window.
101 focus left|right|up|down
102 Focus the neighbor window situated in the given direction.
104 shift left|right|up|down
105 Exchange the current window with the given neighbor.
107 push left|right|up|down
108 Push the fence located in the given direction.
110 pull left|right|up|down
111 Pull the fence located in the given direction.
113 cycle next|prev [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
114 Focus the next or previous window matching the given constraints.
116 nearest older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
117 Focus the nearest window matching the given constraints.
119 circulate forward|backward
120 Circulate the leaves in the given direction.
123 Toggle the fullscreen state of the current window.
126 Toggle the floating state of the current window.
129 Toggle the locked state of the current window (locked windows will not respond to the 'close' message).
132 Close the focused window.
135 Kill the focused window.
138 Send the focused window to the given desktop.
140 send_to_monitor MONITOR_NAME
141 Send the focused window to the given monitor.
144 Select the given desktop.
146 use_monitor MONITOR_NAME
147 Select the given monitor.
150 Alternate between the current and the last focused window.
153 Alternate between the current and the last focused desktop.
156 Alternate between the current and the last focused monitor.
159 Make new desktops with the given names.
161 add_in MONITOR_NAME DESKTOP_NAME ...
162 Make new desktops with the given names in the given monitor.
164 rename_monitor CURRENT_NAME NEW_NAME
165 Rename the monitor named CURRENT_NAME to NEW_NAME.
167 rename CURRENT_NAME NEW_NAME
168 Rename the desktop named CURRENT_NAME to NEW_NAME.
170 cycle_monitor next|prev
171 Select the next or previous monitor.
173 cycle_desktop next|prev [--skip-free|--skip-occupied]
174 Select the next or previous desktop.
176 layout monocle|tiled [DESKTOP_NAME ...]
177 Set the layout of the given desktops (current if none given).
180 Cycle the layout of the current desktop.
182 rotate clockwise|counter_clockwise|full_cycle
183 Rotate the tree of the current desktop.
185 rule PATTERN [DESKTOP_NAME] [floating]
186 Create a new rule (PATTERN must match the class or instance name).
189 Manage all the unmanaged windows remaining from a previous session.
192 Reload the autostart file.
195 Reload the default settings.
198 Reload the autostart file and the default settings.
205 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or *#RRGGBB*, booleans are *true* or *false*.
208 Color of the main border of a focused window of a focused monitor.
211 Color of the main border of a focused window of an unfocused monitor.
214 Color of the main border of an unfocused window.
217 Color of the inner border of a window.
220 Color of the outer border of a window.
223 Color of the *presel* message feedback.
225 focused_locked_border_color
226 Color of the main border of a focused locked window of a focused monitor.
228 active_locked_border_color
229 Color of the main border of a focused locked window of an unfocused monitor.
231 normal_locked_border_color
232 Color of the main border of an unfocused locked window.
235 Color of the border of an urgent window.
240 Width of the inner, main and outer borders.
243 Value of the gap that separates windows.
249 Padding space added at the sides of the screen.
252 The value that shall be used for the _NET_WM_NAME property of the root window.
255 The modifier mask used for mouse bindings (possible values: 'shift', 'control', 'lock', 'mod1' ... 'mod5').
258 The modifier holding Num_Lock (cf. xmodmap).
261 The modifier holding Lock.
264 Whether to remove borders for tiled windows in monocle mode.
267 Whether to remove gaps for tiled windows in monocle mode.
270 Wether to focus the window under the mouse pointer.
274 button_modifier + left mouse button
275 Move the window under the pointer.
277 button_modifier + middle mouse button
278 Focus the window under the pointer.
280 button_modifier + right mouse button
281 Resize the window under the pointer (by moving one of its four corners).
285 - Configured and controlled through messages
286 - Multiple monitors support (via *Xinerama*)
287 - EWMH support (`tint2` works)
288 - Automatic and manual modes
289 - Triple window borders
293 `dzen2` fed with the output of `ewmhstatus`. Example: [launchpanel](https://github.com/baskerville/bin/blob/master/launchpanel).
295 Or any EWMH compliant panel.
297 ## Required Libraries:
310 - [Ivan Kanakarakis](https://github.com/c00kiemon5ter)