1 ![logo](https://github.com/baskerville/bspwm/raw/master/resources/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 through the `bspc` program.
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*, a `presel up` message
58 +-------------------------+ +-------------------------+
62 | 3 |------------| --> |------------|------------|
66 +-------------------------+ +-------------------------+
70 The syntax for the client is `bspc COMMAND ARGUMENTS...`.
72 The following messages are handled:
78 Return the value of the given setting.
81 Set the value of the given setting.
84 Output the internal representation of the window tree.
86 list_monitors [--quiet]
87 Perform a dump of each monitor.
90 Perform a dump of each desktop for the current monitor.
93 Return the list of managed windows (i.e. their identifiers).
96 Close the focused window.
99 Kill the focused window.
102 Switch to manual mode and select the splitting direction.
105 Set the splitting ratio of the focused window.
108 Switch to automatic mode.
111 Focus the neighbor node situated in the given direction.
114 Focus the neighbor node situated in the given direction.
117 Push the fence located in the given direction.
120 Pull the fence located in the given direction.
122 nearest older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
123 Focus the nearest leaf matching the given constraints.
125 cycle CYC [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
126 Focus the next or previous window in the list of leaves.
129 Rotate the tree of the current desktop.
132 Move all the fences toward the given corner.
134 send_to_monitor MONITOR_NAME
135 Send the focused window to the given monitor.
138 Send the focused window to the given desktop.
140 use_monitor MONITOR_NAME
141 Select the given monitor.
144 Select the given desktop.
147 Alternate between the current and the last focused window.
150 Alternate between the current and the last focused desktop.
153 Alternate between the current and the last focused monitor.
155 add_in MONITOR_NAME DESKTOP_NAME ...
156 Make new desktops with the given names in the given monitor.
159 Make new desktops with the given names.
161 rename_monitor CURRENT_NAME NEW_NAME
162 Rename the monitor named CURRENT_NAME to NEW_NAME.
164 rename CURRENT_NAME NEW_NAME
165 Rename the desktop named CURRENT_NAME to NEW_NAME.
168 Select the next or previous monitor.
171 Select the next or previous desktop.
174 Set the layout of the current desktop to LYT.
177 Cycle the layout of the current desktop.
180 Toggle the fullscreen state of the current window.
183 Toggle the floating state of the current window.
186 Toggle the locked state of the current window (locked windows will not respond to the 'close' command).
188 rule PATTERN floating
189 Make a new rule that will float the windows whose class name or instance name equals PATTERN.
192 Reload the autostart file.
195 Reload the default settings.
198 Reload the autostart file and the default settings.
202 DIR = left|right|up|down
204 ROT = clockwise|counter_clockwise|full_cycle
205 COR = top_left|top_right|bottom_left|bottom_right
210 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or '#RRGGBB', booleans are 'true' or 'false'.
213 Color of the main border of a focused window of a focused monitor.
216 Color of the main border of a focused window of an unfocused monitor.
219 Color of the main border of an unfocused window.
222 Color of the inner border of a window.
225 Color of the outer border of a window.
228 Color of the *presel* message feedback.
230 focused_locked_border_color
231 Color of the main border of a focused locked window of a focused monitor.
233 active_locked_border_color
234 Color of the main border of a focused locked window of an unfocused monitor.
236 normal_locked_border_color
237 Color of the main border of an unfocused locked window.
240 Color of the border of an urgent window.
245 Width of the inner, main and outer borders.
248 Value of the gap that separates windows.
254 Padding space added at the sides of the screen.
257 The value that shall be used for the _NET_WM_NAME property of the root window.
260 The modifier mask used for mouse bindings (possible values: 'mod1' ... 'mod5').
263 Whether to remove borders for tiled windows in monocle mode.
266 Wether to focus the window under the mouse pointer.
270 button_modifier + left mouse button
271 Move the window under the pointer.
273 button_modifier + middle mouse button
274 Focus the window under the pointer.
276 button_modifier + right mouse button
277 Resize the window under the pointer (by moving one of its four corners).
281 `dzen2` fed with the output of `ewmhstatus`. Example: [launchpanel](https://github.com/baskerville/bin/blob/master/launchpanel).
283 ## Required Libraries:
285 libxcb, xcb-util, xcb-util-wm.