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 cycle CYC [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
123 Focus the next or previous window in the list of leaves.
126 Rotate the tree of the current desktop.
129 Move all the fences toward the given corner.
131 send_to_monitor MONITOR_NAME
132 Send the focused window to the given monitor.
135 Send the focused window to the given desktop.
137 use_monitor MONITOR_NAME
138 Select the given monitor.
141 Select the given desktop.
144 Alternate between the current and the last focused monitor.
147 Alternate between the current and the last focused desktop.
149 add_in MONITOR_NAME DESKTOP_NAME ...
150 Make new desktops with the given names in the given monitor.
153 Make new desktops with the given names.
155 rename_monitor CURRENT_NAME NEW_NAME
156 Rename the monitor named CURRENT_NAME to NEW_NAME.
158 rename CURRENT_NAME NEW_NAME
159 Rename the desktop named CURRENT_NAME to NEW_NAME.
162 Select the next or previous monitor.
165 Select the next or previous desktop.
168 Set the layout of the current desktop to LYT.
171 Cycle the layout of the current desktop.
174 Toggle the fullscreen state of the current window.
177 Toggle the floating state of the current window.
180 Toggle the locked state of the current window (locked windows will not respond to the 'close' command).
182 rule PATTERN floating
183 Make a new rule that will float the windows whose class name or instance name equals PATTERN.
186 Reload the autostart file.
189 Reload the default settings.
192 Reload the autostart file and the default settings.
196 DIR = left|right|up|down
198 ROT = clockwise|counter_clockwise|full_cycle
199 COR = top_left|top_right|bottom_left|bottom_right
204 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or '#RRGGBB', booleans are 'true' or 'false'.
207 Color of the main border of a focused window of a focused monitor.
210 Color of the main border of a focused window of an unfocused monitor.
213 Color of the main border of an unfocused window.
216 Color of the inner border of a window.
219 Color of the outer border of a window.
222 Color of the *presel* message feedback.
224 focused_locked_border_color
225 Color of the main border of a focused locked window of a focused monitor.
227 active_locked_border_color
228 Color of the main border of a focused locked window of an unfocused monitor.
230 normal_locked_border_color
231 Color of the main border of an unfocused locked window.
234 Color of the border of an urgent window.
239 Width of the inner, main and outer borders.
242 Value of the gap that separates windows.
248 Padding space added at the sides of the screen.
251 The value that shall be used for the _NET_WM_NAME property of the root window.
254 Whether to remove borders for tiled windows in monocle mode.
259 Move the window under the pointer.
262 Focus the window under the pointer.
265 Resize the window under the pointer (by moving one of its four corners).
267 Where *M4* is the fourth modifier mask (generally bound to *Super*).
271 `dzen2` fed with the output of `ewmhstatus`. Example: [launchpanel](https://github.com/baskerville/bin/blob/master/launchpanel).
273 ## Required Libraries:
275 libxcb, xcb-util, xcb-util-wm.