]> git.lizzy.rs Git - bspwm.git/blob - doc/bspwm.1.asciidoc
435a327b331e51563cea0331e30ea8d1ec2ff06b
[bspwm.git] / doc / bspwm.1.asciidoc
1 :man source:   Bspwm
2 :man version:  {revnumber}
3 :man manual:   Bspwm Manual
4
5 bspwm(1)
6 ========
7
8 Name
9 ----
10
11 bspwm - Binary space partitioning window manager
12
13 Synopsis
14 --------
15
16 *bspwm* [*-h*|*-v*|*-c* 'CONFIG_PATH']
17
18 *bspc* 'DOMAIN' ['SELECTOR'] 'COMMANDS'
19
20 Description
21 -----------
22
23 *bspwm* is a tiling window manager that represents windows as the leaves of a full binary tree.
24
25 It is controlled and configured via *bspc*.
26
27
28 Options
29 -------
30
31 *-h*::
32         Print the synopsis and exit.
33
34 *-v*::
35         Print the version and exit.
36
37 *-c* 'CONFIG_PATH'::
38         Use the given configuration file.
39
40 Common Definitions
41 ------------------
42
43 ----
44 DIR         := north | west | south | east
45 CYCLE_DIR   := next | prev
46 ----
47
48 Selectors
49 ---------
50
51 Selectors are used to select a target node, desktop, or monitor. A selector
52 can either describe the target relatively or name it globally.
53
54 Selectors consist of a descriptor and any number of non-conflicting modifiers
55 as follows:
56
57         DESCRIPTOR(.MODIFIER)*
58
59 An exclamation mark can be prepended to certain modifiers in order to reverse their meaning.
60
61 Node
62 ~~~~
63
64 Select a node.
65
66 ----
67 NODE_SEL := (<node_id>|PATH|DIR|CYCLE_DIR|last|older|newer|biggest|focused)[.[!]focused][.[!]automatic][.[!]local][.[!]leaf][.[!]STATE][.[!]FLAG][.[!]LAYER][.[!]same_class]
68
69 STATE := tiled|pseudo_tiled|floating|fullscreen
70
71 FLAG := urgent|sticky|private|locked
72
73 LAYER := below|normal|above
74
75 PATH := @[DESK_SEL:][[/]JUMP](/JUMP)*
76
77 JUMP := first|1|second|2|brother|parent|DIR
78 ----
79
80 Descriptors
81 ^^^^^^^^^^^
82
83 <node_id>::
84         Selects the node with the given ID.
85
86 'PATH'::
87         Selects the node at the given path.
88
89 'DIR'::
90         Selects the window in the given (spacial) direction relative to the active node.
91
92 'CYCLE_DIR'::
93         Selects the window in the given (cyclic) direction.
94
95 biggest::
96         Selects the biggest window on the current desktop.
97
98 last::
99         Selects the previously focused node.
100
101 focused::
102         Selects the currently focused node.
103
104 older::
105         Selects the node older than the focused node in the history.
106
107 newer::
108         Selects the node newer than the focused node in the history.
109
110 Path Jumps
111 ^^^^^^^^^^
112
113 The initial node is the focused node (or the root if the path starts with '/') of the focused desktop (or the selected desktop if the path has a 'DESK_SEL' prefix).
114
115 1|first::
116         Jumps to the first child.
117
118 2|second::
119         Jumps to the second child.
120
121 brother::
122         Jumps to the brother node.
123
124 parent::
125         Jumps to the parent node.
126
127 'DIR'::
128         Jumps to the node holding the edge in the given direction.
129
130 Modifiers
131 ^^^^^^^^^
132
133 [!]focused::
134         Only consider focused or unfocused nodes.
135
136 [!]automatic::
137         Only consider nodes in automatic or manual insertion mode.
138
139 [!]local::
140         Only consider nodes in or not in the current desktop.
141
142 [!]leaf::
143         Only consider leaves or internal nodes.
144
145 [!](tiled|pseudo_tiled|floating|fullscreen)::
146         Only consider windows in or not in the given state.
147
148 [!]same_class::
149         Only consider windows that have or don't have the same class as the current window.
150
151 [!](private|urgent|sticky|locked)::
152         Only consider windows that have or don't have the given flag set.
153
154 [!](below|normal|above)::
155         Only consider windows in or not in the given layer.
156
157 Desktop
158 ~~~~~~~
159
160 Select a desktop.
161
162 ----
163 DESKTOP_SEL := (<desktop_name>|[MONITOR_SEL:](focused|^<n>)CYCLE_DIR|last|older|newer)[.[!]occupied][.[!]focused][.[!]urgent][.[!]local]
164 ----
165
166 Descriptors
167 ^^^^^^^^^^^
168
169 <desktop_name>::
170         Selects the desktop with the given name.
171
172 ^<n>::
173         Selects the nth desktop.
174
175 'CYCLE_DIR'::
176         Selects the desktop in the given direction relative to the active desktop.
177
178 last::
179         Selects the previously focused desktop.
180
181 focused::
182         Selects the currently focused desktop.
183
184 older::
185         Selects the desktop older than the focused desktop in the history.
186
187 newer::
188         Selects the desktop newer than the focused desktop in the history.
189
190 Modifiers
191 ^^^^^^^^^
192
193 [!]occupied::
194         Only consider occupied or free desktops.
195
196 [!]focused::
197         Only consider focused or unfocused desktops.
198
199 [!]urgent::
200         Only consider urgent or non urgent desktops.
201
202 [!]local::
203         Only consider inside or outside of the current monitor.
204
205 Monitor
206 ~~~~~~~
207
208 Select a monitor.
209
210 ----
211 MONITOR_SEL := (<monitor_name>|^<n>|DIR|CYCLE_DIR|last|primary|focused|older|newer)[.[!]occupied][.[!]focused]
212 ----
213
214 Descriptors
215 ^^^^^^^^^^^
216
217 <monitor_name>::
218         Selects the monitor with the given name.
219
220 ^<n>::
221         Selects the nth monitor.
222
223 'DIR'::
224         Selects the monitor in the given (spacial) direction relative to the active monitor.
225
226 'CYCLE_DIR'::
227         Selects the monitor in the given (cyclic) direction relative to the active monitor.
228
229 primary::
230         Selects the primary monitor.
231
232 last::
233         Selects the previously focused monitor.
234
235 focused::
236         Selects the currently focused monitor.
237
238 older::
239         Selects the monitor older than the focused monitor in the history.
240
241 newer::
242         Selects the monitor newer than the focused monitor in the history.
243
244 Modifiers
245 ^^^^^^^^^
246
247 [!]occupied::
248         Only consider monitors where the focused desktop is occupied or free.
249
250 [!]focused::
251         Only consider focused or unfocused monitors.
252
253
254 Window States
255 -------------
256
257 tiled::
258         Its size and position are determined by the splitting type and ratio of each node of its path in the window tree.
259
260 pseudo_tiled::
261         Has an unrestricted size while being centered in its tiling space.
262
263 floating::
264         Can be moved/resized freely. Although it doesn't occupy any tiling space, it is still part of the window tree.
265
266 fullscreen::
267         Fills its monitor rectangle and has no borders. It is send in the ABOVE layer by default.
268
269
270 Node Flags
271 ----------
272
273 locked::
274         Ignores the *node --close* message.
275
276 sticky::
277         Stays in the focused desktop of its monitor.
278
279 private::
280         Tries to keep the same tiling position/size.
281
282 urgent::
283         Has its urgency hint set. This flag is set externally.
284
285
286 Stacking Layers
287 --------------
288
289 There's three stacking layers: BELOW, NORMAL and ABOVE.
290
291 In each layer, the window are orderered as follow: tiled & pseudo-tiled < fullscreen < floating.
292
293
294 Domains
295 -------
296
297 Node
298 ~~~~
299
300 General Syntax
301 ^^^^^^^^^^^^^^
302
303 node ['NODE_SEL'] 'COMMANDS'
304
305 Commands
306 ^^^^^^^^
307 *-f*, *--focus* ['NODE_SEL']::
308         Focus the selected or given node.
309
310 *-a*, *--activate* ['NODE_SEL']::
311         Activate the selected or given node.
312
313 *-d*, *--to-desktop* 'DESKTOP_SEL'::
314         Send the selected node to the given desktop.
315
316 *-m*, *--to-monitor* 'MONITOR_SEL'::
317         Send the selected node to the given monitor.
318
319 *-n*, *--to-node* 'NODE_SEL'::
320         Transplant the selected node to the given node.
321
322 *-s*, *--swap* 'NODE_SEL'::
323         Swap the selected node with the given node.
324
325 *-p*, *--presel-dir* [~]'DIR'|cancel::
326         Preselect the splitting area of the selected node (or cancel the preselection).
327
328 *-o*, *--presel-ratio* 'RATIO'::
329         Set the splitting ratio of the preselection area.
330
331 *-r*, *--ratio* 'RATIO'|±'PIXELS'::
332         Set the splitting ratio of the selected node (0 < 'RATIO' < 1).
333
334 *-R*, *--rotate* '90|270|180'::
335         Rotate the tree rooted at the selected node.
336
337 *-F*, *--flip* 'horizontal|vertical'::
338         Flip the the tree rooted at selected node.
339
340 *-E*, *--equalize*::
341         Reset the split ratios of the tree rooted at the selected node to their default value.
342
343 *-B*, *--balance*::
344         Adjust the split ratios of the tree rooted at the selected node so that all windows occupy the same area.
345
346 *-C*, *--circulate* forward|backward::
347         Circulate the windows of the tree rooted at the selected node.
348
349 *-t*, *--state* [~](tiled|pseudo_tiled|floating|fullscreen)::
350         Set the state of the selected window.
351
352 *-g*, *--flag* locked|sticky|private[=on|off]::
353         Set or toggle the given flag for the selected node.
354
355 *-l*, *--layer* below|normal|above::
356         Set the stacking layer of the selected window.
357
358 *-c*, *--close*::
359         Close the windows rooted at the selected node.
360
361 *-k*, *--kill*::
362         Kill the windows rooted at the selected node.
363
364 Desktop
365 ~~~~~~~
366
367 General Syntax
368 ^^^^^^^^^^^^^^
369
370 desktop ['DESKTOP_SEL'] 'COMMANDS'
371
372 COMMANDS
373 ^^^^^^^^
374 *-f*, *--focus* ['DESKTOP_SEL']::
375         Focus the selected or given desktop.
376
377 *-a*, *--activate* ['DESKTOP_SEL']::
378         Activate the selected or given desktop.
379
380 *-m*, *--to-monitor* 'MONITOR_SEL'::
381         Send the selected desktop to the given monitor.
382
383 *-l*, *--layout* 'CYCLE_DIR'|monocle|tiled::
384         Set or cycle the layout of the selected desktop.
385
386 *-n*, *--rename* <new_name>::
387         Rename the selected desktop.
388
389 *-s*, *--swap* 'DESKTOP_SEL'::
390         Swap the selected desktop with the given desktop.
391
392 *-b*, *--bubble* 'CYCLE_DIR'::
393         Bubble the selected desktop in the given direction.
394
395 *-r*, *--remove*::
396         Remove the selected desktop.
397
398 Monitor
399 ~~~~~~~
400
401 General Syntax
402 ^^^^^^^^^^^^^^
403
404 monitor ['MONITOR_SEL'] 'COMMANDS'
405
406 Commands
407 ^^^^^^^^
408 *-f*, *--focus* ['MONITOR_SEL']::
409         Focus the selected or given monitor.
410
411 *-a*, *--add-desktops* <name>...::
412         Create desktops with the given names in the selected monitor.
413
414 *-r*, *--remove-desktops* <name>...::
415         Remove desktops with the given names.
416
417 *-o*, *--reorder-desktops* <name>...::
418         Reorder the desktops of the selected monitor to match the given order.
419
420 *-d*, *--reset-desktops* <name>...::
421         Rename, add or remove desktops depending on whether the number of given names is equal, superior or inferior to the number of existing desktops. Incidentally reset the settings of the existing desktops.
422
423 *-n*, *--rename* <new_name>::
424         Rename the selected monitor.
425
426 *-s*, *--swap* 'MONITOR_SEL'::
427         Swap the selected monitor with the given monitor.
428
429 Query
430 ~~~~~
431
432 General Syntax
433 ^^^^^^^^^^^^^^
434
435 query 'COMMANDS' ['OPTIONS']
436
437 Commands
438 ^^^^^^^^
439
440 *-N*, *--nodes*::
441         List the IDs of the matching nodes.
442
443 *-D*, *--desktops*::
444         List the names of the matching desktops.
445
446 *-M*, *--monitors*::
447         List the names of the matching monitors.
448
449 *-T*, *--tree*::
450         Print a JSON representation of the matching item.
451
452 Options
453 ^^^^^^^
454
455 [*-m*,*--monitor* ['MONITOR_SEL']] | [*-d*,*--desktop* ['DESKTOP_SEL']] | [*-n*, *--node* ['NODE_SEL']]::
456         Constrain matches to the selected monitor, desktop or node. The descriptor can be omitted for '-M', '-D' and '-N'.
457
458 Wm
459 ~~
460
461 General Syntax
462 ^^^^^^^^^^^^^^
463
464 wm 'COMMANDS'
465
466 Commands
467 ^^^^^^^^
468
469 *-d*, *--dump-state*::
470         Dump the current world state on standard output.
471
472 *-l*, *--load-state* <file_path>::
473         Load a world state from the given file.
474
475 *-a*, *--add-monitor* <name> WxH+X+Y::
476         Add a monitor for the given name and rectangle.
477
478 *-r*, *--remove-monitor* <name>::
479         Remove the monitor with the given name.
480
481 *-o*, *--adopt-orphans*::
482         Manage all the unmanaged windows remaining from a previous session.
483
484 *-h*, *--record-history* on|off::
485         Enable or disable the recording of node focus history.
486
487 *-g*, *--get-status*::
488         Print the current status information.
489
490 Pointer
491 ~~~~~~~
492
493 General Syntax
494 ^^^^^^^^^^^^^^
495
496 pointer 'COMMANDS'
497
498 Commands
499 ^^^^^^^^
500
501 *-g*, *--grab* focus|move|resize_side|resize_corner::
502         Initiate the given pointer action.
503
504 *-t*, *--track* <x> <y>::
505         Pass the pointer root coordinates for the current pointer action.
506
507 *-u*, *--ungrab*::
508         Terminate the current pointer action.
509
510 Rule
511 ~~~~
512
513 General Syntax
514 ^^^^^^^^^^^^^^
515
516 rule 'COMMANDS'
517
518 Commands
519 ^^^^^^^^
520
521 *-a*, *--add* (<class_name>|*)[:(<instance_name>|*)] [*-o*|*--one-shot*] [monitor=MONITOR_SEL|desktop=DESKTOP_SEL|node=NODE_SEL] [state=STATE] [layer=LAYER] [split_dir=DIR] [split_ratio=RATIO] [(locked|sticky|private|center|follow|manage|focus|border)=(on|off)]::
522         Create a new rule.
523
524 *-r*, *--remove* ^<n>|head|tail|(<class_name>|*)[:(<instance_name>|*)]...::
525         Remove the given rules.
526
527 *-l*, *--list*::
528         List the rules.
529
530 Config
531 ~~~~~~
532
533 General Syntax
534 ^^^^^^^^^^^^^^
535
536 config [-m 'MONITOR_SEL'|-d 'DESKTOP_SEL'|-n 'NODE_SEL'] <key> [<value>]::
537         Get or set the value of <key>.
538
539 Subscribe
540 ~~~~~~~~~
541
542 General Syntax
543 ^^^^^^^^^^^^^^
544 subscribe (all|report|monitor|desktop|window|...)*::
545         Continuously print status information. See the *EVENTS* section for the detailed description of each event.
546
547 Quit
548 ~~~~
549
550 General Syntax
551 ^^^^^^^^^^^^^^
552
553 quit [<status>]::
554         Quit with an optional exit status.
555
556 Exit Codes
557 ----------
558
559 If the server can't handle a message, *bspc* will return with one of the following exit codes:
560
561 1::
562         Failure.
563 2::
564         Syntax error.
565 3::
566         Unknown command.
567
568
569 Settings
570 --------
571 Colors are in the form '#RRGGBB', booleans are 'true', 'on', 'false' or 'off'.
572
573 All the boolean settings are 'false' by default unless stated otherwise.
574
575 Global Settings
576 ~~~~~~~~~~~~~~~
577
578 'normal_border_color'::
579         Color of the border of an unfocused window.
580
581 'active_border_color'::
582         Color of the border of a focused window of an unfocused monitor.
583
584 'focused_border_color'::
585         Color of the border of a focused window of a focused monitor.
586
587 'presel_feedback_color'::
588         Color of the *node --presel-{dir,ratio}* message feedback area.
589
590 'split_ratio'::
591         Default split ratio.
592
593 'status_prefix'::
594         Prefix prepended to each of the status lines.
595
596 'external_rules_command'::
597         External command used to retrieve rule consequences. The command will receive the the ID of the window being processed as its first argument and the class and instance names as second and third arguments. The output of that command must have the following format: *key1=value1 key2=value2 ...* (the valid key/value pairs are given in the description of the 'rule' command).
598
599 'initial_polarity'::
600         On which child should a new window be attached when adding a window on a single window tree in automatic mode. Accept the following values: *first_child*, *second_child*.
601
602 'history_aware_focus'::
603         Give priority to the focus history when focusing nodes.
604
605 'focus_by_distance'::
606         Base focusing on distances between windows.
607
608 'borderless_monocle'::
609         Remove borders of tiled windows for the *monocle* desktop layout.
610
611 'gapless_monocle'::
612         Remove gaps of tiled windows for the *monocle* desktop layout.
613
614 'single_monocle'::
615         Set the desktop layout to *monocle* if there's only one tiled window in the tree.
616
617 'focus_follows_pointer'::
618         Focus the window under the pointer.
619
620 'pointer_follows_focus'::
621         When focusing a window, put the pointer at its center.
622
623 'pointer_follows_monitor'::
624         When focusing a monitor, put the pointer at its center.
625
626 'ignore_ewmh_focus'::
627         Ignore EWMH focus requests coming from applications.
628
629 'center_pseudo_tiled'::
630         Center pseudo tiled windows into their tiling rectangles. Defaults to 'true'.
631
632 'remove_disabled_monitors'::
633         Consider disabled monitors as disconnected.
634
635 'remove_unplugged_monitors'::
636         Remove unplugged monitors.
637
638 'merge_overlapping_monitors'::
639         Merge overlapping monitors (the bigger remains).
640
641 Monitor and Desktop Settings
642 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
643
644 'top_padding'::
645 'right_padding'::
646 'bottom_padding'::
647 'left_padding'::
648         Padding space added at the sides of the monitor or desktop.
649
650 Default, Desktop Default and Window Settings
651 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
652
653 'border_width'::
654         Window border width.
655
656 Default and Desktop Settings
657 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
658
659 'window_gap'::
660         Size of the gap that separates windows.
661
662
663 Events
664 ------
665
666 'report'::
667         See the next section for the description of the format.
668
669 'monitor_add <monitor_name> <monitor_id> <monitor_geometry>'::
670         A monitor is added.
671
672 'monitor_rename <old_name> <new_name>'::
673         A monitor is renamed.
674
675 'monitor_remove <monitor_name>'::
676         A monitor is removed.
677
678 'monitor_focus <monitor_name>'::
679         A monitor is focused.
680
681 'monitor_geometry <monitor_name> <monitor_geometry>'::
682         The geometry of a monitor changed.
683
684 'desktop_add <monitor_name> <desktop_name>'::
685         A desktop is added.
686
687 'desktop_rename <monitor_name> <old_name> <new_name>'::
688         A desktop is renamed.
689
690 'desktop_remove <monitor_name> <desktop_name>'::
691         A desktop is removed.
692
693 'desktop_swap <src_monitor_name> <src_desktop_name> <dst_monitor_name> <dst_desktop_name>'::
694         A desktop is swapped.
695
696 'desktop_transfer <src_monitor_name> <src_desktop_name> <dst_monitor_name>'::
697         A desktop is transferred.
698
699 'desktop_focus <monitor_name> <desktop_name>'::
700         A desktop is focused.
701
702 'desktop_activate <monitor_name> <desktop_name>'::
703         A desktop is activated.
704
705 'desktop_layout <monitor_name> <desktop_name> tiled|monocle'::
706         The layout of a desktop changed.
707
708 'node_manage <monitor_name> <desktop_name> <node_id> <ip_id>'::
709         A window is managed.
710
711 'node_unmanage <monitor_name> <desktop_name> <node_id>'::
712         A window is unmanaged.
713
714 'node_swap <src_monitor_name> <src_desktop_name> <src_node_id> <dst_monitor_name> <dst_desktop_name> <dst_node_id>'::
715         A node is swapped.
716
717 'node_transfer <src_monitor_name> <src_desktop_name> <src_node_id> <dst_monitor_name> <dst_desktop_name> <dst_node_id>'::
718         A node is transferred.
719
720 'node_focus <monitor_name> <desktop_name> <node_id>'::
721         A node is focused.
722
723 'node_activate <monitor_name> <desktop_name> <node_id>'::
724         A node is activated.
725
726 'node_presel <monitor_name> <desktop_name> <node_id> (dir DIR|ratio RATIO|cancel)'::
727         A node is preselected.
728
729 'node_stack <node_id_1> below|above <node_id_2>'::
730         A node is stacked below or above another node.
731
732 'node_geometry <monitor_name> <desktop_name> <node_id> <node_geometry>'::
733         The geometry of a window changed.
734
735 'node_state <monitor_name> <desktop_name> <node_id> tiled|pseudo_tiled|floating|fullscreen on|off'::
736         The state of a window changed.
737
738 'node_flag <monitor_name> <desktop_name> <node_id> sticky|private|locked|urgent on|off'::
739         One of the flags of a node changed.
740
741 'node_layer <monitor_name> <desktop_name> <node_id> below|normal|above'::
742         The layer of a window changed.
743
744 Please note that *bspwm* initializes monitors before it reads messages on its socket, therefore the initial monitor events can't be received.
745
746 Report Format
747 -------------
748
749 Each report event message is composed of items separated by colons.
750
751 Each item has the form '<type><value>' where '<type>' is the first character of the item.
752
753 'M<monitor_name>'::
754         Focused monitor.
755
756 'm<monitor_name>'::
757         Unfocused monitor.
758
759 'O<desktop_name>'::
760         Occupied focused desktop.
761
762 'o<desktop_name>'::
763         Occupied unfocused desktop.
764
765 'F<desktop_name>'::
766         Free focused desktop.
767
768 'f<desktop_name>'::
769         Free unfocused desktop.
770
771 'U<desktop_name>'::
772         Urgent focused desktop.
773
774 'u<desktop_name>'::
775         Urgent unfocused desktop.
776
777 'L(T|M)'::
778         Layout of the focused desktop of a monitor.
779
780 'T(T|P|F|=|@)'::
781         State of the focused node of a focused desktop.
782
783 'G(S?P?L?)'::
784         Active flags of the focused node of a focused desktop.
785
786 Environment Variables
787 ---------------------
788
789 'BSPWM_SOCKET'::
790         The path of the socket used for the communication between *bspc* and *bspwm*. If it isn't defined, then the following path is used: '/tmp/bspwm<host_name>_<display_number>_<screen_number>-socket'.
791
792 Contributors
793 ------------
794
795 * Steven Allen <steven at stebalien.com>
796 * Thomas Adam <thomas at xteddy.org>
797 * Ivan Kanakarakis <ivan.kanak at gmail.com>
798
799 Author
800 ------
801
802 Bastien Dejean <nihilhill at gmail.com>