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