]> git.lizzy.rs Git - bspwm.git/blob - README.md
Options for 'cycle_desktop': --skip-{free,occupied}
[bspwm.git] / README.md
1 ![logo](https://github.com/baskerville/bspwm/raw/master/resources/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 through the `bspc` program.
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 `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*, 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 ## Messages
69
70 The syntax for the client is `bspc COMMAND ARGUMENTS...`.
71
72 The following messages are handled:
73
74     quit
75         Quit.
76
77     get SETTING
78         Return the value of the given setting.
79
80     set SETTING VALUE
81         Set the value of the given setting.
82
83     dump
84         Output the internal representation of the window tree.
85
86     list_monitors [--quiet]
87         Perform a dump of each monitor.
88
89     list [--quiet]
90         Perform a dump of each desktop for the current monitor.
91
92     windows
93         Return the list of managed windows (i.e. their identifiers).
94
95     close
96         Close the focused window.
97
98     kill
99         Kill the focused window.
100
101     presel DIR
102         Switch to manual mode and select the splitting direction.
103
104     ratio VALUE
105         Set the splitting ratio of the focused window.
106
107     cancel
108         Switch to automatic mode.
109
110     focus DIR
111         Focus the neighbor node situated in the given direction. 
112
113     shift DIR
114         Focus the neighbor node situated in the given direction. 
115
116     push DIR
117         Push the fence located in the given direction.
118
119     pull DIR
120         Pull the fence located in the given direction.
121
122     nearest older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]
123         Focus the nearest leaf matching the given constraints.
124
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.
127
128     rotate ROT
129         Rotate the tree of the current desktop.
130
131     magnetise COR
132         Move all the fences toward the given corner.
133
134     send_to_monitor MONITOR_NAME
135         Send the focused window to the given monitor.
136
137     send_to DESKTOP_NAME
138         Send the focused window to the given desktop.
139
140     use_monitor MONITOR_NAME
141         Select the given monitor.
142
143     use DESKTOP_NAME
144         Select the given desktop.
145
146     alternate
147         Alternate between the current and the last focused window.
148
149     alternate_desktop
150         Alternate between the current and the last focused desktop.
151
152     alternate_monitor
153         Alternate between the current and the last focused monitor.
154
155     add_in MONITOR_NAME DESKTOP_NAME ...
156         Make new desktops with the given names in the given monitor.
157
158     add DESKTOP_NAME ...
159         Make new desktops with the given names.
160
161     rename_monitor CURRENT_NAME NEW_NAME
162         Rename the monitor named CURRENT_NAME to NEW_NAME.
163
164     rename CURRENT_NAME NEW_NAME
165         Rename the desktop named CURRENT_NAME to NEW_NAME.
166
167     cycle_monitor CYC
168         Select the next or previous monitor.
169
170     cycle_desktop CYC [--skip-free|--skip-occupied]
171         Select the next or previous desktop.
172         
173     layout LYT
174         Set the layout of the current desktop to LYT.
175
176     cycle_layout
177         Cycle the layout of the current desktop.
178
179     toggle_fullscreen
180         Toggle the fullscreen state of the current window.
181
182     toggle_floating
183         Toggle the floating state of the current window.
184
185     toggle_locked
186         Toggle the locked state of the current window (locked windows will not respond to the 'close' command).
187
188     rule PATTERN floating 
189         Make a new rule that will float the windows whose class name or instance name equals PATTERN. 
190
191     reload_autostart
192         Reload the autostart file.
193
194     reload_settings
195         Reload the default settings.
196
197     reload
198         Reload the autostart file and the default settings.
199
200 Where
201
202     DIR = left|right|up|down
203     CYC = next|prev
204     ROT = clockwise|counter_clockwise|full_cycle
205     COR = top_left|top_right|bottom_left|bottom_right
206     LYT = monocle|tiled
207
208 ## Settings
209
210 Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or '#RRGGBB', booleans are 'true' or 'false'.
211
212     focused_border_color
213         Color of the main border of a focused window of a focused monitor.
214
215     active_border_color
216         Color of the main border of a focused window of an unfocused monitor.
217
218     normal_border_color
219         Color of the main border of an unfocused window.
220     
221     inner_border_color
222         Color of the inner border of a window.
223
224     outer_border_color
225         Color of the outer border of a window.
226     
227     presel_border_color
228         Color of the *presel* message feedback.
229
230     focused_locked_border_color
231         Color of the main border of a focused locked window of a focused monitor.
232
233     active_locked_border_color
234         Color of the main border of a focused locked window of an unfocused monitor.
235
236     normal_locked_border_color
237         Color of the main border of an unfocused locked window.
238
239     urgent_border_color
240         Color of the border of an urgent window.
241
242     inner_border_width
243     main_border_width
244     outer_border_width
245         Width of the inner, main and outer borders.
246
247     window_gap
248         Value of the gap that separates windows.
249
250     top_padding
251     bottom_padding
252     left_padding
253     right_padding
254         Padding space added at the sides of the screen.
255
256     wm_name
257         The value that shall be used for the _NET_WM_NAME property of the root window.
258
259     button_modifier
260         The modifier mask used for mouse bindings (possible values: 'mod1' ... 'mod5').
261
262     borderless_monocle 
263         Whether to remove borders for tiled windows in monocle mode.
264
265     focus_follows_mouse
266         Wether to focus the window under the mouse pointer.
267
268 ## Mouse Bindings
269
270     button_modifier + left mouse button
271         Move the window under the pointer.
272
273     button_modifier + middle mouse button
274         Focus the window under the pointer.
275
276     button_modifier + right mouse button
277         Resize the window under the pointer (by moving one of its four corners).
278
279 ## Panel
280
281 `dzen2` fed with the output of `ewmhstatus`. Example: [launchpanel](https://github.com/baskerville/bin/blob/master/launchpanel).
282
283 ## Required Libraries:
284
285 libxcb, xcb-util, xcb-util-wm.
286
287 ## Installation
288
289     make
290     make install
291