]> git.lizzy.rs Git - bspwm.git/blob - doc/bspwm.1
650f07d24845e26e57e05182d892b3c79b6b9eba
[bspwm.git] / doc / bspwm.1
1 '\" t
2 .\"     Title: bspwm
3 .\"    Author: [see the "Author" section]
4 .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
5 .\"      Date: 08/22/2017
6 .\"    Manual: Bspwm Manual
7 .\"    Source: Bspwm 0.9.3-22-g7091d65
8 .\"  Language: English
9 .\"
10 .TH "BSPWM" "1" "08/22/2017" "Bspwm 0\&.9\&.3\-22\-g7091d65" "Bspwm Manual"
11 .\" -----------------------------------------------------------------
12 .\" * Define some portability stuff
13 .\" -----------------------------------------------------------------
14 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 .\" http://bugs.debian.org/507673
16 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 .ie \n(.g .ds Aq \(aq
19 .el       .ds Aq '
20 .\" -----------------------------------------------------------------
21 .\" * set default formatting
22 .\" -----------------------------------------------------------------
23 .\" disable hyphenation
24 .nh
25 .\" disable justification (adjust text to left margin only)
26 .ad l
27 .\" -----------------------------------------------------------------
28 .\" * MAIN CONTENT STARTS HERE *
29 .\" -----------------------------------------------------------------
30 .SH "NAME"
31 bspwm \- Binary space partitioning window manager
32 .SH "SYNOPSIS"
33 .sp
34 \fBbspwm\fR [\fB\-h\fR|\fB\-v\fR|\fB\-c\fR \fICONFIG_PATH\fR]
35 .sp
36 \fBbspc\fR \fIDOMAIN\fR [\fISELECTOR\fR] \fICOMMANDS\fR
37 .sp
38 \fBbspc\fR \fICOMMAND\fR [\fIOPTIONS\fR] [\fIARGUMENTS\fR]
39 .SH "DESCRIPTION"
40 .sp
41 \fBbspwm\fR is a tiling window manager that represents windows as the leaves of a full binary tree\&.
42 .sp
43 It is controlled and configured via \fBbspc\fR\&.
44 .SH "OPTIONS"
45 .PP
46 \fB\-h\fR
47 .RS 4
48 Print the synopsis and exit\&.
49 .RE
50 .PP
51 \fB\-v\fR
52 .RS 4
53 Print the version and exit\&.
54 .RE
55 .PP
56 \fB\-c\fR \fICONFIG_PATH\fR
57 .RS 4
58 Use the given configuration file\&.
59 .RE
60 .SH "COMMON DEFINITIONS"
61 .sp
62 .if n \{\
63 .RS 4
64 .\}
65 .nf
66 DIR         := north | west | south | east
67 CYCLE_DIR   := next | prev
68 .fi
69 .if n \{\
70 .RE
71 .\}
72 .SH "SELECTORS"
73 .sp
74 Selectors are used to select a target node, desktop, or monitor\&. A selector can either describe the target relatively or name it globally\&.
75 .sp
76 Selectors consist of an optional reference, a descriptor and any number of non\-conflicting modifiers as follows:
77 .sp
78 .if n \{\
79 .RS 4
80 .\}
81 .nf
82 [REFERENCE#]DESCRIPTOR(\&.MODIFIER)*
83 .fi
84 .if n \{\
85 .RE
86 .\}
87 .sp
88 The relative targets are computed in relation to the given reference (the default reference value is \fBfocused\fR)\&.
89 .sp
90 An exclamation mark can be prepended to any modifier in order to reverse its meaning\&.
91 .sp
92 The following characters cannot be used in monitor or desktop names: \fB#\fR, \fB:\fR, \fB\&.\fR\&.
93 .SS "Node"
94 .sp
95 Select a node\&.
96 .sp
97 .if n \{\
98 .RS 4
99 .\}
100 .nf
101 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]
102
103 STATE := tiled|pseudo_tiled|floating|fullscreen
104
105 FLAG := hidden|sticky|private|locked|urgent
106
107 LAYER := below|normal|above
108
109 PATH := @[DESKTOP_SEL:][[/]JUMP](/JUMP)*
110
111 JUMP := first|1|second|2|brother|parent|DIR
112 .fi
113 .if n \{\
114 .RE
115 .\}
116 .sp
117 .it 1 an-trap
118 .nr an-no-space-flag 1
119 .nr an-break-flag 1
120 .br
121 .ps +1
122 \fBDescriptors\fR
123 .RS 4
124 .PP
125 \fIDIR\fR
126 .RS 4
127 Selects the window in the given (spacial) direction relative to the reference node\&.
128 .RE
129 .PP
130 \fICYCLE_DIR\fR
131 .RS 4
132 Selects the window in the given (cyclic) direction relative to the reference node\&.
133 .RE
134 .PP
135 \fIPATH\fR
136 .RS 4
137 Selects the node at the given path\&.
138 .RE
139 .PP
140 last
141 .RS 4
142 Selects the previously focused node relative to the reference node\&.
143 .RE
144 .PP
145 older
146 .RS 4
147 Selects the node older than the reference node in the history\&.
148 .RE
149 .PP
150 newer
151 .RS 4
152 Selects the node newer than the reference node in the history\&.
153 .RE
154 .PP
155 focused
156 .RS 4
157 Selects the currently focused node\&.
158 .RE
159 .PP
160 pointed
161 .RS 4
162 Selects the window under the pointer\&.
163 .RE
164 .PP
165 biggest
166 .RS 4
167 Selects the biggest window\&.
168 .RE
169 .PP
170 <node_id>
171 .RS 4
172 Selects the node with the given ID\&.
173 .RE
174 .RE
175 .sp
176 .it 1 an-trap
177 .nr an-no-space-flag 1
178 .nr an-break-flag 1
179 .br
180 .ps +1
181 \fBPath Jumps\fR
182 .RS 4
183 .sp
184 The initial node is the focused node (or the root if the path starts with \fI/\fR) of the reference desktop (or the selected desktop if the path has a \fIDESKTOP_SEL\fR prefix)\&.
185 .PP
186 1|first
187 .RS 4
188 Jumps to the first child\&.
189 .RE
190 .PP
191 2|second
192 .RS 4
193 Jumps to the second child\&.
194 .RE
195 .PP
196 brother
197 .RS 4
198 Jumps to the brother node\&.
199 .RE
200 .PP
201 parent
202 .RS 4
203 Jumps to the parent node\&.
204 .RE
205 .PP
206 \fIDIR\fR
207 .RS 4
208 Jumps to the node holding the edge in the given direction\&.
209 .RE
210 .RE
211 .sp
212 .it 1 an-trap
213 .nr an-no-space-flag 1
214 .nr an-break-flag 1
215 .br
216 .ps +1
217 \fBModifiers\fR
218 .RS 4
219 .PP
220 [!]focused
221 .RS 4
222 Only consider focused or unfocused nodes\&.
223 .RE
224 .PP
225 [!]automatic
226 .RS 4
227 Only consider nodes in automatic or manual insertion mode\&. See also
228 \fB\-\-presel\-dir\fR
229 under
230 \fBNode\fR
231 in the
232 \fBDOMAINS\fR
233 section below\&.
234 .RE
235 .PP
236 [!]local
237 .RS 4
238 Only consider nodes in or not in the reference desktop\&.
239 .RE
240 .PP
241 [!]active
242 .RS 4
243 Only consider nodes in or not in the active desktop of their monitor\&.
244 .RE
245 .PP
246 [!]leaf
247 .RS 4
248 Only consider leaves or internal nodes\&.
249 .RE
250 .PP
251 [!]window
252 .RS 4
253 Only consider nodes that hold or don\(cqt hold a window\&.
254 .RE
255 .PP
256 [!](tiled|pseudo_tiled|floating|fullscreen)
257 .RS 4
258 Only consider windows in or not in the given state\&.
259 .RE
260 .PP
261 [!]same_class
262 .RS 4
263 Only consider windows that have or don\(cqt have the same class as the reference window\&.
264 .RE
265 .PP
266 [!]descendant_of
267 .RS 4
268 Only consider nodes that are or aren\(cqt descendants of the reference node\&.
269 .RE
270 .PP
271 [!]ancestor_of
272 .RS 4
273 Only consider nodes that are or aren\(cqt ancestors of the reference node\&.
274 .RE
275 .PP
276 [!](hidden|sticky|private|locked|urgent)
277 .RS 4
278 Only consider windows that have or don\(cqt have the given flag set\&.
279 .RE
280 .PP
281 [!](below|normal|above)
282 .RS 4
283 Only consider windows in or not in the given layer\&.
284 .RE
285 .RE
286 .SS "Desktop"
287 .sp
288 Select a desktop\&.
289 .sp
290 .if n \{\
291 .RS 4
292 .\}
293 .nf
294 DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|last|older|newer|[MONITOR_SEL:](focused|^<n>)|<desktop_id>|<desktop_name>)[\&.[!]occupied][\&.[!]focused][\&.[!]urgent][\&.[!]local]
295 .fi
296 .if n \{\
297 .RE
298 .\}
299 .sp
300 .it 1 an-trap
301 .nr an-no-space-flag 1
302 .nr an-break-flag 1
303 .br
304 .ps +1
305 \fBDescriptors\fR
306 .RS 4
307 .PP
308 \fICYCLE_DIR\fR
309 .RS 4
310 Selects the desktop in the given direction relative to the reference desktop\&.
311 .RE
312 .PP
313 last
314 .RS 4
315 Selects the previously focused desktop relative to the reference desktop\&.
316 .RE
317 .PP
318 older
319 .RS 4
320 Selects the desktop older than the reference desktop in the history\&.
321 .RE
322 .PP
323 newer
324 .RS 4
325 Selects the desktop newer than the reference desktop in the history\&.
326 .RE
327 .PP
328 focused
329 .RS 4
330 Selects the currently focused desktop\&.
331 .RE
332 .PP
333 ^<n>
334 .RS 4
335 Selects the nth desktop\&. If
336 \fBMONITOR_SEL\fR
337 is given, selects the nth desktop on the selected monitor\&.
338 .RE
339 .PP
340 <desktop_id>
341 .RS 4
342 Selects the desktop with the given ID\&.
343 .RE
344 .PP
345 <desktop_name>
346 .RS 4
347 Selects the desktop with the given name\&.
348 .RE
349 .RE
350 .sp
351 .it 1 an-trap
352 .nr an-no-space-flag 1
353 .nr an-break-flag 1
354 .br
355 .ps +1
356 \fBModifiers\fR
357 .RS 4
358 .PP
359 [!]occupied
360 .RS 4
361 Only consider occupied or free desktops\&.
362 .RE
363 .PP
364 [!]focused
365 .RS 4
366 Only consider focused or unfocused desktops\&.
367 .RE
368 .PP
369 [!]urgent
370 .RS 4
371 Only consider urgent or non urgent desktops\&.
372 .RE
373 .PP
374 [!]local
375 .RS 4
376 Only consider desktops inside or outside of the reference monitor\&.
377 .RE
378 .RE
379 .SS "Monitor"
380 .sp
381 Select a monitor\&.
382 .sp
383 .if n \{\
384 .RS 4
385 .\}
386 .nf
387 MONITOR_SEL := [MONITOR_SEL#](DIR|CYCLE_DIR|last|older|newer|focused|primary|^<n>|<monitor_id>|<monitor_name>)[\&.[!]occupied][\&.[!]focused]
388 .fi
389 .if n \{\
390 .RE
391 .\}
392 .sp
393 .it 1 an-trap
394 .nr an-no-space-flag 1
395 .nr an-break-flag 1
396 .br
397 .ps +1
398 \fBDescriptors\fR
399 .RS 4
400 .PP
401 \fIDIR\fR
402 .RS 4
403 Selects the monitor in the given (spacial) direction relative to the reference monitor\&.
404 .RE
405 .PP
406 \fICYCLE_DIR\fR
407 .RS 4
408 Selects the monitor in the given (cyclic) direction relative to the reference monitor\&.
409 .RE
410 .PP
411 last
412 .RS 4
413 Selects the previously focused monitor relative to the reference monitor\&.
414 .RE
415 .PP
416 older
417 .RS 4
418 Selects the monitor older than the reference monitor in the history\&.
419 .RE
420 .PP
421 newer
422 .RS 4
423 Selects the monitor newer than the reference monitor in the history\&.
424 .RE
425 .PP
426 focused
427 .RS 4
428 Selects the currently focused monitor\&.
429 .RE
430 .PP
431 primary
432 .RS 4
433 Selects the primary monitor\&.
434 .RE
435 .PP
436 ^<n>
437 .RS 4
438 Selects the nth monitor\&.
439 .RE
440 .PP
441 <monitor_id>
442 .RS 4
443 Selects the monitor with the given ID\&.
444 .RE
445 .PP
446 <monitor_name>
447 .RS 4
448 Selects the monitor with the given name\&.
449 .RE
450 .RE
451 .sp
452 .it 1 an-trap
453 .nr an-no-space-flag 1
454 .nr an-break-flag 1
455 .br
456 .ps +1
457 \fBModifiers\fR
458 .RS 4
459 .PP
460 [!]occupied
461 .RS 4
462 Only consider monitors where the focused desktop is occupied or free\&.
463 .RE
464 .PP
465 [!]focused
466 .RS 4
467 Only consider focused or unfocused monitors\&.
468 .RE
469 .RE
470 .SH "WINDOW STATES"
471 .PP
472 tiled
473 .RS 4
474 Its size and position are determined by the splitting type and ratio of each node of its path in the window tree\&.
475 .RE
476 .PP
477 pseudo_tiled
478 .RS 4
479 Has an unrestricted size while being centered in its tiling space\&.
480 .RE
481 .PP
482 floating
483 .RS 4
484 Can be moved/resized freely\&. Although it doesn\(cqt occupy any tiling space, it is still part of the window tree\&.
485 .RE
486 .PP
487 fullscreen
488 .RS 4
489 Fills its monitor rectangle and has no borders\&. It is send in the ABOVE layer by default\&.
490 .RE
491 .SH "NODE FLAGS"
492 .PP
493 hidden
494 .RS 4
495 Is hidden and doesn\(cqt occupy any tiling space\&.
496 .RE
497 .PP
498 sticky
499 .RS 4
500 Stays in the focused desktop of its monitor\&.
501 .RE
502 .PP
503 private
504 .RS 4
505 Tries to keep the same tiling position/size\&.
506 .RE
507 .PP
508 locked
509 .RS 4
510 Ignores the
511 \fBnode \-\-close\fR
512 message\&.
513 .RE
514 .PP
515 urgent
516 .RS 4
517 Has its urgency hint set\&. This flag is set externally\&.
518 .RE
519 .SH "STACKING LAYERS"
520 .sp
521 There\(cqs three stacking layers: BELOW, NORMAL and ABOVE\&.
522 .sp
523 In each layer, the window are orderered as follow: tiled & pseudo\-tiled < fullscreen < floating\&.
524 .SH "DOMAINS"
525 .SS "Node"
526 .sp
527 .it 1 an-trap
528 .nr an-no-space-flag 1
529 .nr an-break-flag 1
530 .br
531 .ps +1
532 \fBGeneral Syntax\fR
533 .RS 4
534 .sp
535 node [\fINODE_SEL\fR] \fICOMMANDS\fR
536 .sp
537 If \fINODE_SEL\fR is omitted, \fBfocused\fR is assumed\&.
538 .RE
539 .sp
540 .it 1 an-trap
541 .nr an-no-space-flag 1
542 .nr an-break-flag 1
543 .br
544 .ps +1
545 \fBCommands\fR
546 .RS 4
547 .PP
548 \fB\-f\fR, \fB\-\-focus\fR [\fINODE_SEL\fR]
549 .RS 4
550 Focus the selected or given node\&.
551 .RE
552 .PP
553 \fB\-a\fR, \fB\-\-activate\fR [\fINODE_SEL\fR]
554 .RS 4
555 Activate the selected or given node\&.
556 .RE
557 .PP
558 \fB\-d\fR, \fB\-\-to\-desktop\fR \fIDESKTOP_SEL\fR
559 .RS 4
560 Send the selected node to the given desktop\&.
561 .RE
562 .PP
563 \fB\-m\fR, \fB\-\-to\-monitor\fR \fIMONITOR_SEL\fR
564 .RS 4
565 Send the selected node to the given monitor\&.
566 .RE
567 .PP
568 \fB\-n\fR, \fB\-\-to\-node\fR \fINODE_SEL\fR
569 .RS 4
570 Transplant the selected node to the given node\&.
571 .RE
572 .PP
573 \fB\-s\fR, \fB\-\-swap\fR \fINODE_SEL\fR
574 .RS 4
575 Swap the selected node with the given node\&.
576 .RE
577 .PP
578 \fB\-p\fR, \fB\-\-presel\-dir\fR [~]\fIDIR\fR|cancel
579 .RS 4
580 Preselect the splitting area of the selected node (or cancel the preselection)\&. If
581 \fB~\fR
582 is prepended to
583 \fIDIR\fR
584 and the current preselection direction matches
585 \fIDIR\fR, then the argument is interpreted as
586 \fBcancel\fR\&. A node with a preselected area is said to be in "manual insertion mode"\&.
587 .RE
588 .PP
589 \fB\-o\fR, \fB\-\-presel\-ratio\fR \fIRATIO\fR
590 .RS 4
591 Set the splitting ratio of the preselection area\&.
592 .RE
593 .PP
594 \fB\-v\fR, \fB\-\-move\fR \fIdx\fR \fIdy\fR
595 .RS 4
596 Move the selected window by
597 \fIdx\fR
598 pixels horizontally and
599 \fIdy\fR
600 pixels vertically\&.
601 .RE
602 .PP
603 \fB\-z\fR, \fB\-\-resize\fR top|left|bottom|right|top_left|top_right|bottom_right|bottom_left \fIdx\fR \fIdy\fR
604 .RS 4
605 Resize the selected window by moving the given handle by
606 \fIdx\fR
607 pixels horizontally and
608 \fIdy\fR
609 pixels vertically\&.
610 .RE
611 .PP
612 \fB\-r\fR, \fB\-\-ratio\fR \fIRATIO\fR|(+|\-)(\fIPIXELS\fR|\fIFRACTION\fR)
613 .RS 4
614 Set the splitting ratio of the selected node (0 <
615 \fIRATIO\fR
616 < 1)\&.
617 .RE
618 .PP
619 \fB\-R\fR, \fB\-\-rotate\fR \fI90|270|180\fR
620 .RS 4
621 Rotate the tree rooted at the selected node\&.
622 .RE
623 .PP
624 \fB\-F\fR, \fB\-\-flip\fR \fIhorizontal|vertical\fR
625 .RS 4
626 Flip the the tree rooted at selected node\&.
627 .RE
628 .PP
629 \fB\-E\fR, \fB\-\-equalize\fR
630 .RS 4
631 Reset the split ratios of the tree rooted at the selected node to their default value\&.
632 .RE
633 .PP
634 \fB\-B\fR, \fB\-\-balance\fR
635 .RS 4
636 Adjust the split ratios of the tree rooted at the selected node so that all windows occupy the same area\&.
637 .RE
638 .PP
639 \fB\-C\fR, \fB\-\-circulate\fR forward|backward
640 .RS 4
641 Circulate the windows of the tree rooted at the selected node\&.
642 .RE
643 .PP
644 \fB\-t\fR, \fB\-\-state\fR [~](tiled|pseudo_tiled|floating|fullscreen)
645 .RS 4
646 Set the state of the selected window\&. If
647 \fB~\fR
648 is present and the current state matches the given state, then the argument is interpreted as the last state\&.
649 .RE
650 .PP
651 \fB\-g\fR, \fB\-\-flag\fR hidden|sticky|private|locked[=on|off]
652 .RS 4
653 Set or toggle the given flag for the selected node\&.
654 .RE
655 .PP
656 \fB\-l\fR, \fB\-\-layer\fR below|normal|above
657 .RS 4
658 Set the stacking layer of the selected window\&.
659 .RE
660 .PP
661 \fB\-i\fR, \fB\-\-insert\-receptacle\fR
662 .RS 4
663 Insert a receptacle node at the selected node\&.
664 .RE
665 .PP
666 \fB\-c\fR, \fB\-\-close\fR
667 .RS 4
668 Close the windows rooted at the selected node\&.
669 .RE
670 .PP
671 \fB\-k\fR, \fB\-\-kill\fR
672 .RS 4
673 Kill the windows rooted at the selected node\&.
674 .RE
675 .RE
676 .SS "Desktop"
677 .sp
678 .it 1 an-trap
679 .nr an-no-space-flag 1
680 .nr an-break-flag 1
681 .br
682 .ps +1
683 \fBGeneral Syntax\fR
684 .RS 4
685 .sp
686 desktop [\fIDESKTOP_SEL\fR] \fICOMMANDS\fR
687 .sp
688 If \fIDESKTOP_SEL\fR is omitted, \fBfocused\fR is assumed\&.
689 .RE
690 .sp
691 .it 1 an-trap
692 .nr an-no-space-flag 1
693 .nr an-break-flag 1
694 .br
695 .ps +1
696 \fBCOMMANDS\fR
697 .RS 4
698 .PP
699 \fB\-f\fR, \fB\-\-focus\fR [\fIDESKTOP_SEL\fR]
700 .RS 4
701 Focus the selected or given desktop\&.
702 .RE
703 .PP
704 \fB\-a\fR, \fB\-\-activate\fR [\fIDESKTOP_SEL\fR]
705 .RS 4
706 Activate the selected or given desktop\&.
707 .RE
708 .PP
709 \fB\-m\fR, \fB\-\-to\-monitor\fR \fIMONITOR_SEL\fR
710 .RS 4
711 Send the selected desktop to the given monitor\&.
712 .RE
713 .PP
714 \fB\-l\fR, \fB\-\-layout\fR \fICYCLE_DIR\fR|monocle|tiled
715 .RS 4
716 Set or cycle the layout of the selected desktop\&.
717 .RE
718 .PP
719 \fB\-n\fR, \fB\-\-rename\fR <new_name>
720 .RS 4
721 Rename the selected desktop\&.
722 .RE
723 .PP
724 \fB\-s\fR, \fB\-\-swap\fR \fIDESKTOP_SEL\fR
725 .RS 4
726 Swap the selected desktop with the given desktop\&.
727 .RE
728 .PP
729 \fB\-b\fR, \fB\-\-bubble\fR \fICYCLE_DIR\fR
730 .RS 4
731 Bubble the selected desktop in the given direction\&.
732 .RE
733 .PP
734 \fB\-r\fR, \fB\-\-remove\fR
735 .RS 4
736 Remove the selected desktop\&.
737 .RE
738 .RE
739 .SS "Monitor"
740 .sp
741 .it 1 an-trap
742 .nr an-no-space-flag 1
743 .nr an-break-flag 1
744 .br
745 .ps +1
746 \fBGeneral Syntax\fR
747 .RS 4
748 .sp
749 monitor [\fIMONITOR_SEL\fR] \fICOMMANDS\fR
750 .sp
751 If \fIMONITOR_SEL\fR is omitted, \fBfocused\fR is assumed\&.
752 .RE
753 .sp
754 .it 1 an-trap
755 .nr an-no-space-flag 1
756 .nr an-break-flag 1
757 .br
758 .ps +1
759 \fBCommands\fR
760 .RS 4
761 .PP
762 \fB\-f\fR, \fB\-\-focus\fR [\fIMONITOR_SEL\fR]
763 .RS 4
764 Focus the selected or given monitor\&.
765 .RE
766 .PP
767 \fB\-s\fR, \fB\-\-swap\fR \fIMONITOR_SEL\fR
768 .RS 4
769 Swap the selected monitor with the given monitor\&.
770 .RE
771 .PP
772 \fB\-a\fR, \fB\-\-add\-desktops\fR <name>\&...
773 .RS 4
774 Create desktops with the given names in the selected monitor\&.
775 .RE
776 .PP
777 \fB\-o\fR, \fB\-\-reorder\-desktops\fR <name>\&...
778 .RS 4
779 Reorder the desktops of the selected monitor to match the given order\&.
780 .RE
781 .PP
782 \fB\-d\fR, \fB\-\-reset\-desktops\fR <name>\&...
783 .RS 4
784 Rename, add or remove desktops depending on whether the number of given names is equal, superior or inferior to the number of existing desktops\&.
785 .RE
786 .PP
787 \fB\-g\fR, \fB\-\-rectangle\fR WxH+X+Y
788 .RS 4
789 Set the rectangle of the selected monitor\&.
790 .RE
791 .PP
792 \fB\-n\fR, \fB\-\-rename\fR <new_name>
793 .RS 4
794 Rename the selected monitor\&.
795 .RE
796 .PP
797 \fB\-r\fR, \fB\-\-remove\fR
798 .RS 4
799 Remove the selected monitor\&.
800 .RE
801 .RE
802 .SS "Query"
803 .sp
804 .it 1 an-trap
805 .nr an-no-space-flag 1
806 .nr an-break-flag 1
807 .br
808 .ps +1
809 \fBGeneral Syntax\fR
810 .RS 4
811 .sp
812 query \fICOMMANDS\fR [\fIOPTIONS\fR]
813 .RE
814 .sp
815 .it 1 an-trap
816 .nr an-no-space-flag 1
817 .nr an-break-flag 1
818 .br
819 .ps +1
820 \fBCommands\fR
821 .RS 4
822 .sp
823 The optional selectors are references\&.
824 .PP
825 \fB\-N\fR, \fB\-\-nodes\fR [\fINODE_SEL\fR]
826 .RS 4
827 List the IDs of the matching nodes\&.
828 .RE
829 .PP
830 \fB\-D\fR, \fB\-\-desktops\fR [\fIDESKTOP_SEL\fR]
831 .RS 4
832 List the IDs (or names) of the matching desktops\&.
833 .RE
834 .PP
835 \fB\-M\fR, \fB\-\-monitors\fR [\fIMONITOR_SEL\fR]
836 .RS 4
837 List the IDs (or names) of the matching monitors\&.
838 .RE
839 .PP
840 \fB\-T\fR, \fB\-\-tree\fR
841 .RS 4
842 Print a JSON representation of the matching item\&.
843 .RE
844 .RE
845 .sp
846 .it 1 an-trap
847 .nr an-no-space-flag 1
848 .nr an-break-flag 1
849 .br
850 .ps +1
851 \fBOptions\fR
852 .RS 4
853 .PP
854 \fB\-m\fR,\fB\-\-monitor\fR [\fIMONITOR_SEL\fR], \fB\-d\fR,\fB\-\-desktop\fR [\fIDESKTOP_SEL\fR], \fB\-n\fR, \fB\-\-node\fR [\fINODE_SEL\fR]
855 .RS 4
856 Constrain matches to the selected monitor, desktop or node\&. The descriptor can be omitted for
857 \fI\-M\fR,
858 \fI\-D\fR
859 and
860 \fI\-N\fR\&.
861 .RE
862 .PP
863 \fB\-\-names\fR
864 .RS 4
865 Print names instead of IDs\&. Can only be used with
866 \fI\-M\fR
867 and
868 \fI\-D\fR\&.
869 .RE
870 .RE
871 .SS "Wm"
872 .sp
873 .it 1 an-trap
874 .nr an-no-space-flag 1
875 .nr an-break-flag 1
876 .br
877 .ps +1
878 \fBGeneral Syntax\fR
879 .RS 4
880 .sp
881 wm \fICOMMANDS\fR
882 .RE
883 .sp
884 .it 1 an-trap
885 .nr an-no-space-flag 1
886 .nr an-break-flag 1
887 .br
888 .ps +1
889 \fBCommands\fR
890 .RS 4
891 .PP
892 \fB\-d\fR, \fB\-\-dump\-state\fR
893 .RS 4
894 Dump the current world state on standard output\&.
895 .RE
896 .PP
897 \fB\-l\fR, \fB\-\-load\-state\fR <file_path>
898 .RS 4
899 Load a world state from the given file\&.
900 .RE
901 .PP
902 \fB\-a\fR, \fB\-\-add\-monitor\fR <name> WxH+X+Y
903 .RS 4
904 Add a monitor for the given name and rectangle\&.
905 .RE
906 .PP
907 \fB\-O\fR, \fB\-\-reorder\-monitors\fR <name>\&...
908 .RS 4
909 Reorder the list of monitors to match the given order\&.
910 .RE
911 .PP
912 \fB\-o\fR, \fB\-\-adopt\-orphans\fR
913 .RS 4
914 Manage all the unmanaged windows remaining from a previous session\&.
915 .RE
916 .PP
917 \fB\-h\fR, \fB\-\-record\-history\fR on|off
918 .RS 4
919 Enable or disable the recording of node focus history\&.
920 .RE
921 .PP
922 \fB\-g\fR, \fB\-\-get\-status\fR
923 .RS 4
924 Print the current status information\&.
925 .RE
926 .RE
927 .SS "Rule"
928 .sp
929 .it 1 an-trap
930 .nr an-no-space-flag 1
931 .nr an-break-flag 1
932 .br
933 .ps +1
934 \fBGeneral Syntax\fR
935 .RS 4
936 .sp
937 rule \fICOMMANDS\fR
938 .RE
939 .sp
940 .it 1 an-trap
941 .nr an-no-space-flag 1
942 .nr an-break-flag 1
943 .br
944 .ps +1
945 \fBCommands\fR
946 .RS 4
947 .PP
948 \fB\-a\fR, \fB\-\-add\fR (<class_name>|*)[:(<instance_name>|*)] [\fB\-o\fR|\fB\-\-one\-shot\fR] [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]
949 .RS 4
950 Create a new rule\&.
951 .RE
952 .PP
953 \fB\-r\fR, \fB\-\-remove\fR ^<n>|head|tail|(<class_name>|*)[:(<instance_name>|*)]\&...
954 .RS 4
955 Remove the given rules\&.
956 .RE
957 .PP
958 \fB\-l\fR, \fB\-\-list\fR
959 .RS 4
960 List the rules\&.
961 .RE
962 .RE
963 .SS "Config"
964 .sp
965 .it 1 an-trap
966 .nr an-no-space-flag 1
967 .nr an-break-flag 1
968 .br
969 .ps +1
970 \fBGeneral Syntax\fR
971 .RS 4
972 .PP
973 config [\-m \fIMONITOR_SEL\fR|\-d \fIDESKTOP_SEL\fR|\-n \fINODE_SEL\fR] <setting> [<value>]
974 .RS 4
975 Get or set the value of <setting>\&.
976 .RE
977 .RE
978 .SS "Subscribe"
979 .sp
980 .it 1 an-trap
981 .nr an-no-space-flag 1
982 .nr an-break-flag 1
983 .br
984 .ps +1
985 \fBGeneral Syntax\fR
986 .RS 4
987 .PP
988 subscribe [\fIOPTIONS\fR] (all|report|monitor|desktop|node|\&...)*
989 .RS 4
990 Continuously print events\&. See the
991 \fBEVENTS\fR
992 section for the description of each event\&.
993 .RE
994 .RE
995 .sp
996 .it 1 an-trap
997 .nr an-no-space-flag 1
998 .nr an-break-flag 1
999 .br
1000 .ps +1
1001 \fBOptions\fR
1002 .RS 4
1003 .PP
1004 \fB\-f\fR, \fB\-\-fifo\fR
1005 .RS 4
1006 Print a path to a FIFO from which events can be read and return\&.
1007 .RE
1008 .PP
1009 \fB\-c\fR, \fB\-\-count\fR \fICOUNT\fR
1010 .RS 4
1011 Stop the corresponding
1012 \fBbspc\fR
1013 process after having received
1014 \fICOUNT\fR
1015 events\&.
1016 .RE
1017 .RE
1018 .SS "Quit"
1019 .sp
1020 .it 1 an-trap
1021 .nr an-no-space-flag 1
1022 .nr an-break-flag 1
1023 .br
1024 .ps +1
1025 \fBGeneral Syntax\fR
1026 .RS 4
1027 .PP
1028 quit [<status>]
1029 .RS 4
1030 Quit with an optional exit status\&.
1031 .RE
1032 .RE
1033 .SH "EXIT CODES"
1034 .sp
1035 If the server can\(cqt handle a message, \fBbspc\fR will return with a non\-zero exit code\&.
1036 .SH "SETTINGS"
1037 .sp
1038 Colors are in the form \fI#RRGGBB\fR, booleans are \fItrue\fR, \fIon\fR, \fIfalse\fR or \fIoff\fR\&.
1039 .sp
1040 All the boolean settings are \fIfalse\fR by default unless stated otherwise\&.
1041 .SS "Global Settings"
1042 .PP
1043 \fInormal_border_color\fR
1044 .RS 4
1045 Color of the border of an unfocused window\&.
1046 .RE
1047 .PP
1048 \fIactive_border_color\fR
1049 .RS 4
1050 Color of the border of a focused window of an unfocused monitor\&.
1051 .RE
1052 .PP
1053 \fIfocused_border_color\fR
1054 .RS 4
1055 Color of the border of a focused window of a focused monitor\&.
1056 .RE
1057 .PP
1058 \fIpresel_feedback_color\fR
1059 .RS 4
1060 Color of the
1061 \fBnode \-\-presel\-{dir,ratio}\fR
1062 message feedback area\&.
1063 .RE
1064 .PP
1065 \fIsplit_ratio\fR
1066 .RS 4
1067 Default split ratio\&.
1068 .RE
1069 .PP
1070 \fIstatus_prefix\fR
1071 .RS 4
1072 Prefix prepended to each of the status lines\&.
1073 .RE
1074 .PP
1075 \fIexternal_rules_command\fR
1076 .RS 4
1077 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:
1078 \fBkey1=value1 key2=value2 \&...\fR
1079 (the valid key/value pairs are given in the description of the
1080 \fIrule\fR
1081 command)\&.
1082 .RE
1083 .PP
1084 \fIinitial_polarity\fR
1085 .RS 4
1086 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:
1087 \fBfirst_child\fR,
1088 \fBsecond_child\fR\&.
1089 .RE
1090 .PP
1091 \fIdirectional_focus_tightness\fR
1092 .RS 4
1093 The tightness of the algorithm used to decide whether a window is on the
1094 \fIDIR\fR
1095 side of another window\&. Accept the following values:
1096 \fBhigh\fR,
1097 \fBlow\fR\&.
1098 .RE
1099 .PP
1100 \fIborderless_monocle\fR
1101 .RS 4
1102 Remove borders of tiled windows for the
1103 \fBmonocle\fR
1104 desktop layout\&.
1105 .RE
1106 .PP
1107 \fIgapless_monocle\fR
1108 .RS 4
1109 Remove gaps of tiled windows for the
1110 \fBmonocle\fR
1111 desktop layout\&.
1112 .RE
1113 .PP
1114 \fIpaddingless_monocle\fR
1115 .RS 4
1116 Remove padding space for the
1117 \fBmonocle\fR
1118 desktop layout\&.
1119 .RE
1120 .PP
1121 \fIsingle_monocle\fR
1122 .RS 4
1123 Set the desktop layout to
1124 \fBmonocle\fR
1125 if there\(cqs only one tiled window in the tree\&.
1126 .RE
1127 .PP
1128 \fIpointer_motion_interval\fR
1129 .RS 4
1130 The minimum interval, in milliseconds, between two motion notify events\&.
1131 .RE
1132 .PP
1133 \fIpointer_modifier\fR
1134 .RS 4
1135 Keyboard modifier used for moving or resizing windows\&. Accept the following values:
1136 \fBshift\fR,
1137 \fBcontrol\fR,
1138 \fBlock\fR,
1139 \fBmod1\fR,
1140 \fBmod2\fR,
1141 \fBmod3\fR,
1142 \fBmod4\fR,
1143 \fBmod5\fR\&.
1144 .RE
1145 .PP
1146 \fIpointer_action1\fR, \fIpointer_action2\fR, \fIpointer_action3\fR
1147 .RS 4
1148 Action performed when pressing
1149 \fIpointer_modifier\fR
1150 +
1151 \fIbutton<n>\fR\&. Accept the following values:
1152 \fBmove\fR,
1153 \fBresize_side\fR,
1154 \fBresize_corner\fR,
1155 \fBfocus\fR,
1156 \fBnone\fR\&.
1157 .RE
1158 .PP
1159 \fIclick_to_focus\fR
1160 .RS 4
1161 Button used for focusing a window (or a monitor)\&. The possible values are:
1162 \fBbutton1\fR,
1163 \fBbutton2\fR,
1164 \fBbutton3\fR,
1165 \fBany\fR,
1166 \fBnone\fR\&.
1167 .RE
1168 .PP
1169 \fIswallow_first_click\fR
1170 .RS 4
1171 Don\(cqt replay the click that makes a window focused if
1172 \fIclick_to_focus\fR
1173 isn\(cqt
1174 \fBnone\fR\&.
1175 .RE
1176 .PP
1177 \fIfocus_follows_pointer\fR
1178 .RS 4
1179 Focus the window under the pointer\&.
1180 .RE
1181 .PP
1182 \fIpointer_follows_focus\fR
1183 .RS 4
1184 When focusing a window, put the pointer at its center\&.
1185 .RE
1186 .PP
1187 \fIpointer_follows_monitor\fR
1188 .RS 4
1189 When focusing a monitor, put the pointer at its center\&.
1190 .RE
1191 .PP
1192 \fIignore_ewmh_focus\fR
1193 .RS 4
1194 Ignore EWMH focus requests coming from applications\&.
1195 .RE
1196 .PP
1197 \fIcenter_pseudo_tiled\fR
1198 .RS 4
1199 Center pseudo tiled windows into their tiling rectangles\&. Defaults to
1200 \fItrue\fR\&.
1201 .RE
1202 .PP
1203 \fIhonor_size_hints\fR
1204 .RS 4
1205 Apply ICCCM window size hints\&.
1206 .RE
1207 .PP
1208 \fIremove_disabled_monitors\fR
1209 .RS 4
1210 Consider disabled monitors as disconnected\&.
1211 .RE
1212 .PP
1213 \fIremove_unplugged_monitors\fR
1214 .RS 4
1215 Remove unplugged monitors\&.
1216 .RE
1217 .PP
1218 \fImerge_overlapping_monitors\fR
1219 .RS 4
1220 Merge overlapping monitors (the bigger remains)\&.
1221 .RE
1222 .SS "Monitor and Desktop Settings"
1223 .PP
1224 \fItop_padding\fR, \fIright_padding\fR, \fIbottom_padding\fR, \fIleft_padding\fR
1225 .RS 4
1226 Padding space added at the sides of the monitor or desktop\&.
1227 .RE
1228 .SS "Desktop Settings"
1229 .PP
1230 \fIwindow_gap\fR
1231 .RS 4
1232 Size of the gap that separates windows\&.
1233 .RE
1234 .SS "Node Settings"
1235 .PP
1236 \fIborder_width\fR
1237 .RS 4
1238 Window border width\&.
1239 .RE
1240 .SH "POINTER BINDINGS"
1241 .PP
1242 \fIclick_to_focus\fR
1243 .RS 4
1244 Focus the window (or the monitor) under the pointer if the value isn\(cqt
1245 \fBnone\fR\&.
1246 .RE
1247 .PP
1248 \fIpointer_modifier\fR + \fIbutton1\fR
1249 .RS 4
1250 Move the window under the pointer\&.
1251 .RE
1252 .PP
1253 \fIpointer_modifier\fR + \fIbutton2\fR
1254 .RS 4
1255 Resize the window under the pointer by dragging the nearest side\&.
1256 .RE
1257 .PP
1258 \fIpointer_modifier\fR + \fIbutton3\fR
1259 .RS 4
1260 Resize the window under the pointer by dragging the nearest corner\&.
1261 .RE
1262 .sp
1263 The behavior of \fIpointer_modifier\fR + \fIbutton<n>\fR can be modified through the \fIpointer_action<n>\fR setting\&.
1264 .SH "EVENTS"
1265 .PP
1266 \fIreport\fR
1267 .RS 4
1268 See the next section for the description of the format\&.
1269 .RE
1270 .PP
1271 \fImonitor_add <monitor_id> <monitor_name> <monitor_geometry>\fR
1272 .RS 4
1273 A monitor is added\&.
1274 .RE
1275 .PP
1276 \fImonitor_rename <monitor_id> <old_name> <new_name>\fR
1277 .RS 4
1278 A monitor is renamed\&.
1279 .RE
1280 .PP
1281 \fImonitor_remove <monitor_id>\fR
1282 .RS 4
1283 A monitor is removed\&.
1284 .RE
1285 .PP
1286 \fImonitor_swap <src_monitor_id> <dst_monitor_id>\fR
1287 .RS 4
1288 A monitor is swapped\&.
1289 .RE
1290 .PP
1291 \fImonitor_focus <monitor_id>\fR
1292 .RS 4
1293 A monitor is focused\&.
1294 .RE
1295 .PP
1296 \fImonitor_geometry <monitor_id> <monitor_geometry>\fR
1297 .RS 4
1298 The geometry of a monitor changed\&.
1299 .RE
1300 .PP
1301 \fIdesktop_add <monitor_id> <desktop_id> <desktop_name>\fR
1302 .RS 4
1303 A desktop is added\&.
1304 .RE
1305 .PP
1306 \fIdesktop_rename <monitor_id> <desktop_id> <old_name> <new_name>\fR
1307 .RS 4
1308 A desktop is renamed\&.
1309 .RE
1310 .PP
1311 \fIdesktop_remove <monitor_id> <desktop_id>\fR
1312 .RS 4
1313 A desktop is removed\&.
1314 .RE
1315 .PP
1316 \fIdesktop_swap <src_monitor_id> <src_desktop_id> <dst_monitor_id> <dst_desktop_id>\fR
1317 .RS 4
1318 A desktop is swapped\&.
1319 .RE
1320 .PP
1321 \fIdesktop_transfer <src_monitor_id> <src_desktop_id> <dst_monitor_id>\fR
1322 .RS 4
1323 A desktop is transferred\&.
1324 .RE
1325 .PP
1326 \fIdesktop_focus <monitor_id> <desktop_id>\fR
1327 .RS 4
1328 A desktop is focused\&.
1329 .RE
1330 .PP
1331 \fIdesktop_activate <monitor_id> <desktop_id>\fR
1332 .RS 4
1333 A desktop is activated\&.
1334 .RE
1335 .PP
1336 \fIdesktop_layout <monitor_id> <desktop_id> tiled|monocle\fR
1337 .RS 4
1338 The layout of a desktop changed\&.
1339 .RE
1340 .PP
1341 \fInode_add <monitor_id> <desktop_id> <ip_id> <node_id>\fR
1342 .RS 4
1343 A node is added\&.
1344 .RE
1345 .PP
1346 \fInode_remove <monitor_id> <desktop_id> <node_id>\fR
1347 .RS 4
1348 A node is removed\&.
1349 .RE
1350 .PP
1351 \fInode_swap <src_monitor_id> <src_desktop_id> <src_node_id> <dst_monitor_id> <dst_desktop_id> <dst_node_id>\fR
1352 .RS 4
1353 A node is swapped\&.
1354 .RE
1355 .PP
1356 \fInode_transfer <src_monitor_id> <src_desktop_id> <src_node_id> <dst_monitor_id> <dst_desktop_id> <dst_node_id>\fR
1357 .RS 4
1358 A node is transferred\&.
1359 .RE
1360 .PP
1361 \fInode_focus <monitor_id> <desktop_id> <node_id>\fR
1362 .RS 4
1363 A node is focused\&.
1364 .RE
1365 .PP
1366 \fInode_activate <monitor_id> <desktop_id> <node_id>\fR
1367 .RS 4
1368 A node is activated\&.
1369 .RE
1370 .PP
1371 \fInode_presel <monitor_id> <desktop_id> <node_id> (dir DIR|ratio RATIO|cancel)\fR
1372 .RS 4
1373 A node is preselected\&.
1374 .RE
1375 .PP
1376 \fInode_stack <node_id_1> below|above <node_id_2>\fR
1377 .RS 4
1378 A node is stacked below or above another node\&.
1379 .RE
1380 .PP
1381 \fInode_geometry <monitor_id> <desktop_id> <node_id> <node_geometry>\fR
1382 .RS 4
1383 The geometry of a window changed\&.
1384 .RE
1385 .PP
1386 \fInode_state <monitor_id> <desktop_id> <node_id> tiled|pseudo_tiled|floating|fullscreen on|off\fR
1387 .RS 4
1388 The state of a window changed\&.
1389 .RE
1390 .PP
1391 \fInode_flag <monitor_id> <desktop_id> <node_id> hidden|sticky|private|locked|urgent on|off\fR
1392 .RS 4
1393 One of the flags of a node changed\&.
1394 .RE
1395 .PP
1396 \fInode_layer <monitor_id> <desktop_id> <node_id> below|normal|above\fR
1397 .RS 4
1398 The layer of a window changed\&.
1399 .RE
1400 .PP
1401 \fIpointer_action <monitor_id> <desktop_id> <node_id> move|resize_corner|resize_side begin|end\fR
1402 .RS 4
1403 A pointer action occured\&.
1404 .RE
1405 .sp
1406 Please note that \fBbspwm\fR initializes monitors before it reads messages on its socket, therefore the initial monitor events can\(cqt be received\&.
1407 .SH "REPORT FORMAT"
1408 .sp
1409 Each report event message is composed of items separated by colons\&.
1410 .sp
1411 Each item has the form \fI<type><value>\fR where \fI<type>\fR is the first character of the item\&.
1412 .PP
1413 \fIM<monitor_name>\fR
1414 .RS 4
1415 Focused monitor\&.
1416 .RE
1417 .PP
1418 \fIm<monitor_name>\fR
1419 .RS 4
1420 Unfocused monitor\&.
1421 .RE
1422 .PP
1423 \fIO<desktop_name>\fR
1424 .RS 4
1425 Occupied focused desktop\&.
1426 .RE
1427 .PP
1428 \fIo<desktop_name>\fR
1429 .RS 4
1430 Occupied unfocused desktop\&.
1431 .RE
1432 .PP
1433 \fIF<desktop_name>\fR
1434 .RS 4
1435 Free focused desktop\&.
1436 .RE
1437 .PP
1438 \fIf<desktop_name>\fR
1439 .RS 4
1440 Free unfocused desktop\&.
1441 .RE
1442 .PP
1443 \fIU<desktop_name>\fR
1444 .RS 4
1445 Urgent focused desktop\&.
1446 .RE
1447 .PP
1448 \fIu<desktop_name>\fR
1449 .RS 4
1450 Urgent unfocused desktop\&.
1451 .RE
1452 .PP
1453 \fIL(T|M)\fR
1454 .RS 4
1455 Layout of the focused desktop of a monitor\&.
1456 .RE
1457 .PP
1458 \fIT(T|P|F|=|@)\fR
1459 .RS 4
1460 State of the focused node of a focused desktop\&.
1461 .RE
1462 .PP
1463 \fIG(S?P?L?)\fR
1464 .RS 4
1465 Active flags of the focused node of a focused desktop\&.
1466 .RE
1467 .SH "ENVIRONMENT VARIABLES"
1468 .PP
1469 \fIBSPWM_SOCKET\fR
1470 .RS 4
1471 The path of the socket used for the communication between
1472 \fBbspc\fR
1473 and
1474 \fBbspwm\fR\&. If it isn\(cqt defined, then the following path is used:
1475 \fI/tmp/bspwm<host_name>_<display_number>_<screen_number>\-socket\fR\&.
1476 .RE
1477 .SH "CONTRIBUTORS"
1478 .sp
1479 .RS 4
1480 .ie n \{\
1481 \h'-04'\(bu\h'+03'\c
1482 .\}
1483 .el \{\
1484 .sp -1
1485 .IP \(bu 2.3
1486 .\}
1487 Steven Allen <steven at stebalien\&.com>
1488 .RE
1489 .sp
1490 .RS 4
1491 .ie n \{\
1492 \h'-04'\(bu\h'+03'\c
1493 .\}
1494 .el \{\
1495 .sp -1
1496 .IP \(bu 2.3
1497 .\}
1498 Thomas Adam <thomas at xteddy\&.org>
1499 .RE
1500 .sp
1501 .RS 4
1502 .ie n \{\
1503 \h'-04'\(bu\h'+03'\c
1504 .\}
1505 .el \{\
1506 .sp -1
1507 .IP \(bu 2.3
1508 .\}
1509 Ivan Kanakarakis <ivan\&.kanak at gmail\&.com>
1510 .RE
1511 .SH "AUTHOR"
1512 .sp
1513 Bastien Dejean <nihilhill at gmail\&.com>