]> git.lizzy.rs Git - bspwm.git/blob - README.md
Remove settings: '{numlock,capslock}_modifier'
[bspwm.git] / README.md
1 ![logo](https://github.com/baskerville/bspwm/raw/master/logo/bspwm-logo.png)
2
3 ## Description
4
5 `bspwm` is a tiling window manager based on binary space partitioning.
6
7 The windows are represented as the leaves of a binary tree.
8
9 ## Configuration
10
11 `bspwm` have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
12
13 Those messages are sent via `bspc`.
14
15 If the `BSPWM_SOCKET` environment variable is defined, it will be used as the socket path, otherwise `/tmp/bspwm-socket` is used.
16
17 The recommended way of defining keyboard shortcuts is to use `shkd` or `xbindkeys`.
18
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/`.
20
21 Example configurations: [autostart](https://github.com/baskerville/bin/blob/master/bspwm_autostart) and [xbindkeysrc](https://github.com/baskerville/dotfiles/blob/master/xbindkeysrc).
22
23 ## Splitting Modes
24
25 There is only two splitting modes: *automatic* and *manual*.
26
27 The default mode is *automatic*. The *manual* mode is entered by sending a *presel* message.
28
29 Example: insertion of a new node (number 4) into the given tree in
30 *automatic* mode:
31
32                      b                                   c
33                     / \                                 / \
34                    3   a              -->              4   b
35                    ^  / \                              ^  / \
36                      2   1                               3   a
37                                                             / \
38                                                            2   1
39         +-------------------------+         +-------------------------+
40         |            |            |         |            |            |
41         |            |     2      |         |            |     3      |
42         |            |            |         |            |            |
43         |     3      |------------|   -->   |     4      |------------|
44         |     ^      |            |         |     ^      |     |      |
45         |            |     1      |         |            |  1  |  2   |
46         |            |            |         |            |     |      |
47         +-------------------------+         +-------------------------+
48
49 Same departure, but the mode is *manual*, and a `presel up` message
50 was sent beforehand:
51
52                      b                                   b
53                     / \                                 / \
54                    3   a              -->              c   a
55                    ^  / \                             / \ / \
56                      2   1                           4  3 2  1
57                                                      ^
58         +-------------------------+         +-------------------------+
59         |            |            |         |            |            |
60         |            |     2      |         |     4      |     2      |
61         |            |            |         |     ^      |            |
62         |     3      |------------|   -->   |------------|------------|
63         |     ^      |            |         |            |            |
64         |            |     1      |         |     3      |     1      |
65         |            |            |         |            |            |
66         +-------------------------+         +-------------------------+
67
68 ## Synopsis
69
70     bspwm [-v|-s STATUS_FIFO]
71
72     bspc MESSAGE [ARGUMENTS] [OPTIONS]
73
74 ## Messages
75
76 The syntax for the client is `bspc MESSAGE [ARGUMENTS ...]`.
77
78 The following messages are handled:
79
80     get SETTING
81         Return the value of the given setting.
82
83     set SETTING VALUE
84         Set the value of the given setting.
85
86     list [DESKTOP_NAME]
87         Output the internal representation of the window tree.
88
89     list_desktops [--quiet]
90         Perform a dump of each desktop for the current monitor.
91
92     list_monitors [--quiet]
93         Perform a dump of each monitor.
94
95     list_windows
96         Return the list of managed windows (i.e. their identifiers).
97
98     list_rules
99         Return the list of rules.
100
101     presel left|right|up|down [SPLIT_RATIO]
102         Switch to manual mode and select the splitting direction.
103
104     cancel
105         Switch to automatic mode.
106
107     ratio VALUE
108         Set the splitting ratio of the focused window.
109
110     pad MONITOR_NAME [TOP_PADDING [RIGHT_PADDING [BOTTOM_PADDING [LEFT_PADDING]]]]
111         Set the padding of the given monitor.
112
113     focus left|right|up|down
114         Focus the neighbor window situated in the given direction.
115
116     shift left|right|up|down
117         Exchange the current window with the given neighbor.
118
119     push left|right|up|down
120         Push the fence located in the given direction.
121
122     pull left|right|up|down
123         Pull the fence located in the given direction.
124
125     cycle next|prev [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
126         Focus the next or previous window matching the given constraints.
127
128     nearest older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
129         Focus the nearest window matching the given constraints.
130
131     circulate forward|backward
132         Circulate the leaves in the given direction.
133
134     toggle_fullscreen
135         Toggle the fullscreen state of the current window.
136
137     toggle_floating
138         Toggle the floating state of the current window.
139
140     toggle_locked
141         Toggle the locked state of the current window (locked windows will not respond to the 'close' message).
142
143     toggle_visibility
144         Toggle the visibility of all the managed windows.
145
146     close
147         Close the focused window.
148
149     kill
150         Kill the focused window.
151
152     send_to DESKTOP_NAME [--follow]
153         Send the focused window to the given desktop.
154
155     send_to_monitor MONITOR_NAME [--follow]
156         Send the focused window to the given monitor.
157
158     use DESKTOP_NAME
159         Select the given desktop.
160
161     use_monitor MONITOR_NAME
162         Select the given monitor.
163
164     alternate
165         Alternate between the current and the last focused window.
166
167     alternate_desktop
168         Alternate between the current and the last focused desktop.
169
170     alternate_monitor
171         Alternate between the current and the last focused monitor.
172
173     add DESKTOP_NAME ...
174         Make new desktops with the given names.
175
176     add_in MONITOR_NAME DESKTOP_NAME ...
177         Make new desktops with the given names in the given monitor.
178
179     rename_monitor CURRENT_NAME NEW_NAME
180         Rename the monitor named CURRENT_NAME to NEW_NAME.
181
182     rename CURRENT_NAME NEW_NAME
183         Rename the desktop named CURRENT_NAME to NEW_NAME.
184
185     cycle_monitor next|prev
186         Select the next or previous monitor.
187
188     cycle_desktop next|prev [--skip-free|--skip-occupied]
189         Select the next or previous desktop.
190
191     layout monocle|tiled [DESKTOP_NAME ...]
192         Set the layout of the given desktops (current if none given).
193
194     cycle_layout
195         Cycle the layout of the current desktop.
196
197     rotate clockwise|counter_clockwise|full_cycle
198         Rotate the tree of the current desktop.
199
200     rule PATTERN [DESKTOP_NAME] [floating]
201         Create a new rule (PATTERN must match the class or instance name).
202
203     remove_rule UID ...
204         Remove the rules with the given UIDs.
205
206     adopt_orphans
207         Manage all the unmanaged windows remaining from a previous session.
208
209     reload_autostart
210         Reload the autostart file.
211
212     reload_settings
213         Reload the default settings.
214
215     restore FILE_PATH
216         Restore the layout of each desktop from the content of FILE_PATH.
217
218     quit [EXIT_STATUS]
219         Quit.
220
221 ## Settings
222
223 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or *#RRGGBB*, booleans are *true* or *false*.
224
225     focused_border_color
226         Color of the main border of a focused window of a focused monitor.
227
228     active_border_color
229         Color of the main border of a focused window of an unfocused monitor.
230
231     normal_border_color
232         Color of the main border of an unfocused window.
233
234     inner_border_color
235         Color of the inner border of a window.
236
237     outer_border_color
238         Color of the outer border of a window.
239
240     presel_border_color
241         Color of the *presel* message feedback.
242
243     focused_locked_border_color
244         Color of the main border of a focused locked window of a focused monitor.
245
246     active_locked_border_color
247         Color of the main border of a focused locked window of an unfocused monitor.
248
249     normal_locked_border_color
250         Color of the main border of an unfocused locked window.
251
252     urgent_border_color
253         Color of the border of an urgent window.
254
255     inner_border_width
256     main_border_width
257     outer_border_width
258         Width of the inner, main and outer borders.
259
260     window_gap
261         Value of the gap that separates windows.
262
263     {top,right,bottom,left}_padding
264         Padding space added at the sides of the current monitor.
265
266     wm_name
267         The value that shall be used for the _NET_WM_NAME property of the root window.
268
269     button_modifier
270         The modifier mask used for mouse bindings (possible values: 'shift', 'control', 'lock', 'mod1' ... 'mod5').
271
272     borderless_monocle
273         Whether to remove borders for tiled windows in monocle mode.
274
275     gapless_monocle
276         Whether to remove gaps for tiled windows in monocle mode.
277
278     focus_follows_mouse
279         Wether to focus the window under the mouse pointer.
280
281     adaptative_raise
282         Prevent floating windows from being raised when they might cover other floating windows.
283
284 ## Mouse Bindings
285
286     button_modifier + left mouse button
287         Move the window under the pointer.
288
289     button_modifier + middle mouse button
290         Focus the window under the pointer.
291
292     button_modifier + right mouse button
293         Resize the window under the pointer (by moving one of its four corners).
294
295 ## Key Features
296
297 - Configured and controlled through messages
298 - Multiple monitors support (via *Xinerama*)
299 - EWMH support (`tint2` works)
300 - Automatic and manual modes
301 - Triple window borders
302
303 ## Panel
304
305 Multiple choices:
306 - `dzen2` fed with the output of `ewmhstatus`. Example: [launchpanel](https://github.com/baskerville/bin/blob/master/launchpanel).
307 - A custom panel if the `-s` flag is used (have a look at the files in `examples/`).
308 - Any EWMH compliant panel (e.g. `tint2`, `bmpanel2`, etc.).
309
310 ## Required Libraries:
311
312 - libxcb
313 - xcb-util
314 - xcb-util-wm
315 - xcb-util-keysyms
316
317 ## Installation
318
319     make
320     make install
321
322 ## Contributors
323
324 - [Ivan Kanakarakis](https://github.com/c00kiemon5ter)
325
326 ## Mailing List
327
328 bspwm *at* librelist *dot* com.