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