1HERBSTLUFTWM(1) HERBSTLUFTWM(1)
2
3
4
6 herbstluftwm - a manual tiling window manager for X
7
9 herbstluftwm [OPTION ...]
10
12 Starts the herbstluftwm window manager on DISPLAY. It also listens for
13 calls from herbstclient(1) and executes them. The list of available
14 COMMANDS is listed below.
15
16 OPTION can be:
17
18 -c, --autostart PATH
19 use PATH as autostart file instead of the one in $XDG_CONFIG_HOME
20
21 -v, --version
22 print version and exit
23
24 -l, --locked
25 Initially set the monitors_locked setting to 1
26
27 --verbose
28 print verbose information to stderr
29
30 This manual documents the scripting and configuration interface. For a
31 more verbose introduction see herbstluftwm-tutorial(7).
32
34 The basic tiling concept is that the layout is represented by a binary
35 tree. On startup you see one big frame across the entire screen. A
36 frame fulfills exactly one of the following conditions:
37
38 1. Frame contains windows:
39
40 It shows some clients and arranges them. The current layout
41 algorithms are:
42
43 · 0: vertical - clients are placed below each other
44
45 · 1: horizontal - clients are placed next to each other
46
47 · 2: max - all clients are maximized in this frame
48
49 · 3: grid - clients are arranged in an almost quadratic grid
50
51 2. Frame is split into subframes:
52
53 It is split into exactly two subframes in a configurable fraction
54 either in a vertical or horizontal way. So it produces two frames
55 which fulfill the same conditions (new frames always are about to
56 contain windows). If you split a frame that already contains
57 windows, the windows are inherited by the first new child frame.
58
59 If a new window appears, it is put in the currently focused frame. Only
60 the leaves of the frame tree can be focused.
61
62 A frame can be removed, it is then merged with its neighbour frame. Due
63 to the layout structure of a binary tree, each frame (i.e. node in
64 binary tree) has exactly one neighbour.
65
66 The analogy to a binary tree is explained the best way with a small
67 example: On startup you have a simple binary tree, with one frame that
68 can contain clients:
69
70 C
71
72 When splitting it (e.g. with the command split vertical 0.5) you will
73 get this:
74
75 V
76 / \
77 C C
78
79 You also can split the left frame horizontally and you will get:
80
81 V
82 / \
83 H C
84 / \
85 C C
86
87 If you change the focus to the client on the right and remove this
88 frame, it will be merged with the left subtree and you will get:
89
90 H
91 / \
92 C C
93
94 The layout command prints the current layout of all tags as a tree.
95
97 The exact position of a frame in the layout tree may be described by
98 its index which is just a string of characters. The lookup algorithm
99 starts at the root frame and selects one of its two subtrees according
100 to the each character in the index.
101
102 The characters are interpreted as follows:
103
104 · 0: select the first subtree
105
106 · 1: select the second subtree
107
108 · .: select the subtree having the focus
109
110 · /: select the subtree not having the focus
111
112 Thus an empty string refers to the root frame, and "00" refers to the
113 first subtree of the first subtree of the root frame.
114
115 As a special case, the string "@" always refers to the currently
116 focused frame.
117
119 Tags are very similar to workspaces, virtual desktops or window groups.
120 Each tag has one layout. There is a list of tags. You can add or remove
121 tags dynamically.
122
124 Monitors in herbstluftwm are totally independent of the actual physical
125 screens. This means you can for example split your screen in two
126 virtual monitors to view two tags at once on a big screen.
127
128 Each monitor displays exactly one tag on a specified rectangle on the
129 screen.
130
131 Each monitor may have a name, which can be set via add_monitor and
132 rename_monitor. It can be unset with the rename_monitor command. A
133 monitor name is an arbitrary non-empty string which must not start with
134 +, - or any digit.
135
136 A monitor can be referenced in different ways:
137
138 · by its absolute index as listed in the list_monitors command.
139
140 · by its relative index: a + or - followed by a delta, e.g.: +3
141
142 · by its relative position to the focused monitor. -l denotes the
143 monitor left of the focused monitor, -r right of, -u above of, and
144 -d below of, respectively.
145
146 · by "" (an empty string) which represents the current monitor.
147
148 · by its name.
149
151 herbstluftwm is controlled by internal commands, which can be executed
152 via herbstclient(1) or via keybindings.
153
154 quit
155 Quits herbstluftwm.
156
157 reload
158 Executes the autostart file.
159
160 version
161 Prints the version of the running herbstluftwm instance.
162
163 echo [ARGS ...]
164 Prints all given ARGS separated by a single space and a newline
165 afterwards.
166
167 true
168 Ignores all arguments and always returns success, i.e. 0.
169
170 false
171 Ignores all arguments and always returns failure, i.e. 1.
172
173 list_commands
174 Lists all available commands.
175
176 list_monitors
177 List currently configured monitors with their index, area (as
178 rectangle), name (if named) and currently viewed tag.
179
180 list_rules
181 Lists all active rules. Each line consists of all the parameters
182 the rule was called with, plus its label, separated by tabs.
183
184 list_keybinds
185 Lists all bound keys with their associated command. Each line
186 consists of one key combination and the command with its parameters
187 separated by tabs.
188
189 Warning
190 Tabs within command parameters are not escaped!
191
192 lock
193 Increases the monitors_locked setting. Use this if you want to do
194 multiple window actions at once (i.e. without repainting between
195 the single steps). See also: unlock
196
197 unlock
198 Decreases the monitors_locked setting. If monitors_locked is
199 changed to 0, then all monitors are repainted again. See also: lock
200
201 keybind KEY COMMAND [ARGS ...]
202 Adds a key binding. When KEY is pressed, the internal COMMAND (with
203 its ARGS) is executed. A key binding is a (possibly empty) list of
204 modifiers (Mod1, Mod2, Mod3, Mod4, Mod5, Alt, Super, Control/Ctrl,
205 Shift) and one key (see keysymdef.h for a list of keys). Modifiers
206 and the key are concatenated with - or + as separator. If there is
207 already a binding for this KEY, it will be overwritten. Examples:
208
209 · keybind Mod4+Ctrl+q quit
210
211 · keybind Mod1-i toggle always_show_frame
212
213 · keybind Mod1-Shift-space cycle_layout -1
214
215 keyunbind KEY|-F|--all
216 Removes the key binding for KEY. The syntax for KEY is defined in
217 keybind. If -F or --all is given, then all key bindings will be
218 removed.
219
220 mousebind BUTTON ACTION [COMMAND ...]
221 Adds a mouse binding for the floating mode. When BUTTON is pressed,
222 the specified ACTION will be performed. BUTTON has a similar
223 syntax to the KEY argument of keybind: It consists of a list of
224 modifiers (separated by - or +, valid modifiers are listed in the
225 description of keybind) and exactly one button name:
226
227 · B1 or Button1
228
229 · B2 or Button2
230
231 · B3 or Button3
232
233 · B4 or Button4
234
235 · B5 or Button5
236
237 ACTION must be one of the following actions:
238
239 · move: Moves the window by dragging the cursor.
240
241 · resize: Resizes the window by dragging a corner.
242
243 · zoom: Resizes the window into all four directions while keeping
244 the center of the window constant.
245
246 · call: Only calls the specified COMMAND while client.dragged
247 links to the client on which the BUTTON has been performed.
248
249 While an ACTION is performed, client.dragged is the client which is
250 dragged. E.g.:
251
252 · mousebind Mod1-Button3 zoom
253
254 · mousebind Mod1-B4 call substitute WID clients.dragged.winid
255 spawn transset-df --inc -i WID 0.05
256
257 · mousebind Mod1-B5 call substitute WID clients.dragged.winid
258 spawn transset-df --dec -i WID -m 0.2 0.05
259
260 mouseunbind
261 Removes all mouse bindings.
262
263 spawn EXECUTABLE [ARGS ...]
264 Spawns an EXECUTABLE with its ARGS. For details see man 3 execvp.
265 Example:
266
267 · spawn xterm -e man 3 execvp
268
269 wmexec [WINDOWMANAGER [ARGS ...]]
270 Executes the WINDOWMANAGER with its ARGS. This is useful to switch
271 the window manager in the running session without restarting the
272 session. If no or an invalid WINDOWMANAGER is given, then
273 herbstluftwm is restarted. For details see man 3 execvp. Example:
274
275 · wmexec openbox
276
277 chain SEPARATOR [COMMANDS ...]
278 chain expects a SEPARATOR and a list of COMMANDS with arguments.
279 The commands have to be separated by the specified SEPARATOR. The
280 SEPARATOR can by any word and only is recognized as the separator
281 between commands if it exactly matches SEPARATOR. "chain" outputs
282 the appended outputs of all commands and returns the exit code of
283 the last executed command. Examples are:
284
285 · Create a tag called "foo" and directly use it:
286
287 chain , add foo , use foo
288
289 · Rotate the layout clockwise:
290
291 chain .-. lock .-. rotate .-. rotate .-. rotate .-. unlock
292
293 Counterexamples are:
294
295 · This will only create a tag called "foo,":
296
297 chain , add foo, use foo
298
299 · Separator "." defined, but "," is used:
300
301 chain . add foo , use foo
302
303 and SEPARATOR [COMMANDS ...]
304 "and" behaves like the chain command but only executes the
305 specified COMMANDS while the commands return the exit code 0.
306
307 or SEPARATOR [COMMANDS ...]
308 "or" behaves like the chain command but only executes the specified
309 COMMANDS until one command returns the exit code 0.
310
311 ! COMMAND
312 "!" executes the provided command, but inverts its return value. If
313 the provided command returns a nonzero, "!" returns a 0, if the
314 command returns a zero, "!" returns a 1.
315
316 try COMMAND
317 "try" executes the provided command, prints its output, but always
318 returns success, i.e. 0.
319
320 silent COMMAND
321 "silent" executes the provided command, but discards its output and
322 only returns its exit code.
323
324 focus_nth INDEX
325 Focuses the nth window in a frame. The first window has INDEX 0. If
326 INDEX is negative or greater than the last window index, then the
327 last window is focused.
328
329 cycle [DELTA]
330 Cycles the selection within the current frame by DELTA. If DELTA is
331 omitted, DELTA = 1 will be used. DELTA can be negative; DELTA = -1
332 means: cycle in the opposite direction by 1.
333
334 cycle_all [--skip-invisible] [DIRECTION]
335 Cycles through all windows and frames on the current tag.
336 DIRECTION = 1 means forward, DIRECTION = -1 means backward,
337 DIRECTION = 0 has no effect. DIRECTION defaults to 1. If there are
338 multiple windows within on frame, then it acts similar to the cycle
339 command. (The cycle_all command focuses the next/previous leave in
340 the layout tree.). If --skip-invisible is given, then this only
341 cycles through all visible windows and skips invisible windows in
342 the max layout. The focused window is raised.
343
344 cycle_frame [DIRECTION]
345 Cycles through all frames on the current tag. DIRECTION = 1 means
346 forward, DIRECTION = -1 means backward, DIRECTION = 0 has no
347 effect. DIRECTION defaults to 1.
348
349 cycle_layout [DELTA [LAYOUTS ...]]
350 Cycles the layout algorithm in the current frame by DELTA. DELTA
351 defaults to 1. You can find a list of layout algorithms above. If a
352 list of LAYOUTS is given, cycle_layout will cycle through those
353 instead of the default layout algorithm list. Each layout name
354 should occur at most once. Example:
355
356 · cycle_layout -1
357
358 · cycle_layout 1 vertical grid
359
360 set_layout LAYOUT
361 Sets the layout algorithm in the current frame to LAYOUT. For the
362 list of layouts, check the list of layout algorithms above.
363
364 close WINID
365 Closes the specified window gracefully or the focused window if
366 none is given explicitly. See the section on WINDOW IDS how to
367 reference a certain window.
368
369 close_or_remove
370 Closes the focused window or removes the current frame if no window
371 is focused.
372
373 split ALIGN [FRACTION]
374 Splits the focused frame into two subframes with a specified
375 FRACTION between 0 and 1 which defaults to 0.5. ALIGN is one of
376
377
378 · top
379
380 · bottom (= vertical)
381
382 · left,
383
384 · right (= horizontal)
385
386 · explode
387
388 · auto (split along longest side)
389
390 It specifies which of the two halves will be empty after the
391 split. The other half will be occupied by the currently focused
392 frame. After splitting, the originally focuse frame will stay
393 focused. One special ALIGN mode is explode, which splits the
394 frame in such a way that the window sizes and positions are
395 kept as much as possible. If no FRACTION is given to explode
396 mode an optimal fraction is picked automatically. Example:
397
398 · split explode
399
400 · split bottom 0.5
401
402 · split horiz 0.3
403
404 · split vertical 0.5
405
406 · split h
407
408 focus [-i|-e] DIRECTION
409 Moves the focus from current frame to the next frame or client in
410 DIRECTION which is in:
411
412
413 · l[eft]
414
415 · r[ight]
416
417 · u[p]
418
419 · d[own]
420
421 If -i (internal) is given or default_direction_external_only is
422 unset, then the next client in DIRECTION can also be within the
423 same frame. If there is no client within this frame or -e
424 (external) is given, then the next frame in specified DIRECTION
425 will be focused.
426
427 The direction between frames is defined as follows: The focus is in
428 a leaf of the binary tree. Each inner node in the tree remembers
429 the last focus direction (child 0 or child 1). The algorithm uses
430 the shortest possible way from the leaf (the currently focused
431 frame) to the root until it is possible to change focus in the
432 specified DIRECTION. From there the focus goes back to the leaf.
433
434 Example: The focus is at frame A. After executing focus right focus
435 will be at frame C.
436
437 Tree: V,0 Screen: .-----..-----. (before)
438 / \ | B || C |
439 / \ '-----''-----'
440 H,1 H,0 .-----..-----.
441 / \ / \ | A* || D |
442 A* B C D '-----''-----'
443
444 Tree: V,0 Screen: .-----..-----. (after focus right)
445 / \ | B || C* |
446 / \ '-----''-----'
447 H,1 H,0 .-----..-----.
448 / \ / \ | A || D |
449 A B C* D '-----''-----'
450
451 If the currently focused client is floated, then the next floating
452 window in the specified direction is focused and raised.
453
454 If focus_crosses_monitor_boundaries is set and no client or frame
455 is found in the specified DIRECTION, then the next monitor in that
456 DIRECTION is focused.
457
458 focus_edge [-i|-e] DIRECTION
459 Focuses the window on the edge of the tag in the specified
460 DIRECTION. The DIRECTIONS and -e behave as specified at the focus
461 command.
462
463 If -i (internal) is given or default_direction_external_only is
464 unset, then the window on the edge of the tag will be focused.
465 Else, only the frame on the edge of the tag will be focused, and
466 the window that was last focused in that frame will be focused.
467
468 raise WINID
469 Raises the specified window. See the section on WINDOW IDS on how
470 to reference a certain window. Its result is only visible in
471 floating mode.
472
473 Tip
474 The WINID also can specify an unmanaged window, although the
475 completion for the raise command does not list the IDs of unmanaged
476 windows.
477
478 jumpto WINID
479 Puts the focus to the specified window. See the section on WINDOW
480 IDS on how to reference a certain window.
481
482 bring WINID
483 Moves the specified window to the current frame and focuses it. See
484 the section on WINDOW IDS on how to reference a certain window.
485
486 resize DIRECTION FRACTIONDELTA
487 Changes the next fraction in specified DIRECTION by FRACTIONDELTA.
488 DIRECTION behaves as specified at the focus command. You should not
489 omit the sign - or +, because in future versions, the behaviour may
490 change if the sign is omitted. Example:
491
492 · resize right +0.05
493
494 · resize down -0.1
495
496 shift_edge [-i|-e] DIRECTION
497 Shifts the focused window to the the edge of a tag in the specified
498 DIRECTION. The DIRECTIONS behave as specified at the focus command
499 and -i and -e behave as specified at the focus_edge command.
500
501 shift [-i|-e] DIRECTION
502 Shifts the focused window to the next frame in the specified
503 DIRECTION. The DIRECTIONS and -i|-e behave as specified at the
504 focus command. If the focused client is floated instead of being
505 tiled, then client is shifted to the next window or screen edge.
506
507 shift_to_monitor MONITOR
508 Moves the focused window to the tag on the specified MONITOR.
509
510 remove
511 Removes focused frame and merges its windows to its neighbour
512 frame.
513
514 rotate
515 Rotates the layout on the focused tag counterclockwise by 90
516 degrees. This only manipulates the alignment of frames, not the
517 content of them.
518
519 set NAME VALUE
520 Sets the specified setting NAME to VALUE. All SETTINGS are listed
521 in the section below.
522
523 get NAME
524 Prints the value of setting NAME. All SETTINGS are listed in the
525 section below.
526
527 toggle NAME
528 Toggles the setting NAME if it’s an integer setting: If its value
529 is unequal to 0, it becomes 0; else its previous value (which was
530 unequal to 0) is restored.
531
532 cycle_value NAME VALUES ...
533 Cycles value of the setting NAME through VALUES: I.e. it searches
534 the first occurrence of the current value in VALUES and changes the
535 value to the next in the list or to the first one if the end is
536 reached or current value wasn’t found. Example:
537
538 · cycle_value frame_gap 0 5 10 15
539
540 · cycle_value frame_bg_normal_color red green blue
541
542 cycle_monitor [DELTA]
543 Cycles monitor focused by DELTA. DELTA defaults to 1.
544
545 focus_monitor MONITOR
546 Puts focus to the specified monitor.
547
548 add TAG
549 Creates a new empty tag named TAG.
550
551 use TAG
552 Switches the focused monitor to specified TAG.
553
554 use_index INDEX [--skip-visible]
555 Switches the focused monitor to the TAG with the specified INDEX.
556 If INDEX starts with + or -, then INDEX is treated relative to the
557 current TAG. If --skip-visible is passed and INDEX is relative,
558 then tags that are already visible on a monitor are skipped. E.g.
559 this cycles backwards through the tags:
560
561 · use_index -1 --skip-visible
562
563 use_previous
564 Switches the focused monitor to the previously viewed tag.
565
566 merge_tag TAG [TARGET]
567 Removes tag named TAG and moves all its windows to tag TARGET. If
568 TARGET is omitted, the focused tag will be used.
569
570 rename OLDTAG NEWTAG
571 Renames tag named OLDTAG to NEWTAG.
572
573 move TAG
574 Moves the focused window to the tag named TAG.
575
576 move_index INDEX [--skip-visible]
577 Moves the focused window to the tag specified by INDEX. Analogical
578 to the argument for use_index: If INDEX starts with + or -, then it
579 is treated relative. If --skip-visible is passed with a relative
580 index, then already visible tags are skipped.
581
582 lock_tag [MONITOR]
583 Lock the tag switching on the specified monitor. If no argument is
584 given, the currently focused monitor is used. When the tag
585 switching is disabled for a monitor, the commands use and use_index
586 have no effect when executed there. When swap_monitors_to_get_tag
587 is enabled, switching to a tag which is located on a locked
588 monitor, switches to that monitor instead of stealing it from
589 there. The lock state of a monitor is indicated by "[LOCKED]" in
590 the list_monitors output.
591
592 unlock_tag [MONITOR]
593 Re-enables the tag switching on the specified monitor. If no
594 argument is given, the currently focused monitor is used. This is
595 the reverse operation to lock_tag and has no further side effects
596 but removing this lock.
597
598 disjoin_rects RECTS ...
599 Takes a list of rectangles and splits them into smaller pieces
600 until all rectangles are disjoint, the result rectangles are
601 printed line by line. This command does not modify the current list
602 of monitors! So this can be useful in combination with the
603 set_monitors command.
604
605 · E.g. disjoin_rects 600x400+0+0 600x400+300+250 prints this:
606
607 300x150+300+250
608 600x250+0+0
609 300x150+0+250
610 300x150+600+250
611 600x250+300+400
612
613 · In the above example two monitors are split into 5 monitors,
614 which graphically means:
615
616 11111111 11111111
617 1 222222222 333222224444
618 1 2 1 2 disjoin 3 32 24 4
619 11121111 2 --------> 333222224444
620 2 2 555555555
621 222222222 555555555
622
623 set_monitors RECTS ...
624 Sets the list of monitors exactly to the list of given rectangles:
625
626 · The i’th existing monitor is moved to the i’th given RECT
627
628 · New monitors are created if there are more RECTS then monitors
629
630 · Existing monitors are deleted if there are more monitors then
631 RECTS
632
633 detect_monitors -l|--list|--no-disjoin
634 Sets the list of monitors to the available Xinerama monitors. If
635 the Xinerama extension is missing, it will fall back to one monitor
636 across the entire screen. If the detected monitors overlap, the
637 will be split into more monitors that are disjoint but cover the
638 same area using disjoin_rects.
639
640 If -l or --list is passed, the list of rectangles of detected
641 pyhsical monitors is printed. So hc detect_monitors is equivalent
642 to the bash command hc set_monitors $(hc disjoin_rects $(hc
643 detect_monitors -l)).
644
645 add_monitor RECT [TAG [NAME]]
646 Adds a monitor on the specified rectangle RECT and displays TAG on
647 it. TAG currently must not be displayed on any other monitor.
648 RECT is a string of the form WxH±X±Y. If no or an empty TAG is
649 given, then any free tag will be chosen. If a NAME is given, you
650 can reference to this monitor by its name instead of using an
651 index. Example:
652
653 · add_monitor 1024x768-20+0 mynewtag main
654
655 remove_monitor MONITOR
656 Removes the specified monitor.
657
658 move_monitor MONITOR RECT [PADUP [PADRIGHT [PADDOWN [PADLEFT]]]]
659 Moves the specified monitor to rectangle RECT. RECT is defined as
660 in add_monitor. If no or an empty pad is given, it is not changed.
661
662 raise_monitor [MONITOR]
663 Raises the specified monitor or the current one if MONITOR is
664 omitted.
665
666 rename_monitor MONITOR NAME
667 (Re)names an already existing monitor. If NAME is empty, it removes
668 the monitor’s name.
669
670 stack
671 Prints the stack of monitors with the visible tags and their layers
672 as a tree. The order of the printed stack is top to bottom. The
673 style is configured by the tree_style setting.
674
675 monitor_rect [[-p] MONITOR]
676 Prints the rectangle of the specified monitor in the format: X Y W
677 H If no MONITOR or cur is given, then the current monitor is used.
678 If -p is supplied, then the remaining rect without the pad around
679 this monitor is printed.
680
681 pad MONITOR [PADUP [PADRIGHT [PADDOWN [PADLEFT]]]]
682 Sets the pad of specified monitor to the specified padding. If no
683 or an empty padding is given, it is not changed.
684
685 list_padding [MONITOR]
686 Lists the padding of the specified monitor, or the currently
687 focused monitor if no monitor is given.
688
689 layout [TAG [INDEX]]
690 Prints the layout of frame with INDEX on TAG, in a nice tree style.
691 Its style is defined by the tree_style setting. If no TAG is given,
692 the current tag is used. If no INDEX is given, the root frame is
693 used. To specify INDEX without specifying TAG (i.e. use current
694 tag), pass an empty string as TAG.
695
696 An example output is:
697
698 ╾─┐ horizontal 50% selection=1
699 ├─╼ vertical: 0xe00009
700 └─┐ vertical 50% selection=0
701 ├─╼ vertical: 0xa00009 [FOCUS]
702 └─╼ vertical: 0x1000009
703
704 dump [TAG [INDEX]]
705 Prints the same information as the layout command but in a machine
706 readable format. Its output can be read back with the load command.
707
708 An example output (formatted afterwards) is:
709
710 (split horizontal:0.500000:1
711 (clients vertical:0 0xe00009)
712 (split vertical:0.500000:1
713 (clients vertical:0 0xa00009)
714 (clients vertical:0 0x1000009)))
715
716 load [TAG] LAYOUT
717 Loads a given LAYOUT description to specified TAG or current tag if
718 no TAG is given.
719
720 Caution
721 LAYOUT is exactly one parameter. If you are calling it manually
722 from your shell or from a script, quote it properly!
723
724 complete POSITION [COMMAND ARGS ...]
725 Prints the result of tab completion for the partial COMMAND with
726 optional ARGS. You usually do not need this, because there is
727 already tab completion for bash. Example:
728
729 · complete 0 m
730
731 prints all commands beginning with m
732
733 · complete 1 toggle fra
734
735 prints all settings beginning with fra that can be toggled
736
737 complete_shell POSITION [COMMAND ARGS ...]
738 Behaves like complete with the following extras, useful for
739 completion on posix shells:
740
741 · Escape sequences are removed in COMMAND and ARGS.
742
743 · A space is appended to each full completion result.
744
745 · Special characters will be escaped in the output.
746
747 emit_hook ARGS ...
748 Emits a custom hook to all idling herbstclients.
749
750 tag_status [MONITOR]
751 Print a tab separated list of all tags for the specified MONITOR
752 index. If no MONITOR index is given, the focused monitor is used.
753 Each tag name is prefixed with one char, which indicates its state:
754
755 · . the tag is empty
756
757 · : the tag is not empty
758
759 · + the tag is viewed on the specified MONITOR, but this monitor
760 is not focused.
761
762 · # the tag is viewed on the specified MONITOR and it is focused.
763
764 · - the tag is viewed on a different MONITOR, but this monitor is
765 not focused.
766
767 · % the tag is viewed on a different MONITOR and it is focused.
768
769 · ! the tag contains an urgent window
770
771 Warning
772 If you use a tab in one of the tag names, then tag_status is
773 probably quite useless for you.
774
775 floating [[TAG] on|off|toggle|status]
776 Changes the current tag to floating/tiling mode on specified TAG or
777 prints it current status. If no TAG is given, the current tag is
778 used. If no argument is given, floating mode is toggled. If status
779 is given, then on or off is printed, depending of the floating
780 state of TAG.
781
782 rule [[--]FLAG|[--]LABEL|[--]CONDITION|[--]CONSEQUENCE ...]
783 Defines a rule which will be applied to all new clients. Its
784 behaviour is described in the RULES section.
785
786 unrule LABEL|--all|-F
787 Removes all rules named LABEL. If --all or -F is passed, then all
788 rules are removed.
789
790 fullscreen [on|off|toggle]
791 Sets or toggles the fullscreen state of the focused client. If no
792 argument is given, fullscreen mode is toggled.
793
794 pseudotile [on|off|toggle]
795 Sets or toggles the pseudotile state of the focused client. If a
796 client is pseudotiled, then in tiling mode the client is only moved
797 but not resized - the client size will stay the floating size. The
798 only reason to resize the client is to ensure that it fits into its
799 tile. If no argument is given, pseudotile mode is toggled.
800
801 object_tree [PATH]
802 Prints the tree of objects. If the object path PATH is given, only
803 the subtree starting at PATH is printed. See the OBJECTS section
804 for more details.
805
806 attr [PATH [NEWVALUE]
807 Prints the children and attributes of the given object addressed by
808 PATH. If PATH is an attribute, then print the attribute value. If
809 NEWVALUE is given, assign NEWVALUE to the attribute given by PATH.
810 See the OBJECTS section for more details.
811
812 get_attr ATTRIBUTE
813 Print the value of the specified ATTRIBUTE as described in the
814 OBJECTS section.
815
816 set_attr ATTRIBUTE NEWVALUE
817 Assign NEWVALUE to the specified ATTRIBUTE as described in the
818 OBJECTS section.
819
820 new_attr [bool|color|int|string|uint] PATH
821 Creates a new attribute with the name and in the object specified
822 by PATH. Its type is specified by the first argument. The attribute
823 name has to begin with my_.
824
825 remove_attr PATH
826 Removes the user defined attribute PATH.
827
828 substitute IDENTIFIER ATTRIBUTE COMMAND [ARGS ...]
829 Replaces all exact occurrences of IDENTIFIER in COMMAND and its
830 ARGS by the value of the ATTRIBUTE. Note that the COMMAND also is
831 replaced by the attribute value if it equals IDENTIFIER. The
832 replaced command with its arguments then is executed. Example:
833
834 · substitute MYTITLE clients.focus.title echo MYTITLE Prints the
835 title of the currently focused window.
836
837 sprintf IDENTIFIER FORMAT [ATTRIBUTES ...] COMMAND [ARGS ...]
838 Replaces all exact occurrences of IDENTIFIER in COMMAND and its
839 ARGS by the string specified by FORMAT. Each %s in FORMAT stands
840 for the value of the next attribute in ATTRIBUTES, similar to the
841 printf(1) command. The replaced command with its arguments then is
842 executed. Examples:
843
844 · sprintf STR title=%s clients.focus.title echo STR Prints the
845 title of the currently focused window prepended by title=.
846
847 · sprintf X tag=%s tags.focus.name rule once X Moves the next
848 client that appears to the tag that is currently focused.
849
850 · sprintf X %s/%s tags.focus.index tags.count echo X Tells which
851 tag is focused and how many tags there are
852
853 · sprintf l somelongstring echo l l l Prints somelongstring three
854 times, separated by spaces.
855
856 mktemp [bool|int|string|uint] IDENTIFIER COMMAND [ARGS ...]
857 Creates a temporary attribute with the given type and replaces all
858 occurrences of IDENTIFIER in COMMAND and ARGS by by the path of the
859 temporary attribute. The replaced command with its arguments is
860 executed then. The exit status of COMMAND is returned.
861
862 compare ATTRIBUTE OPERATOR VALUE
863 Compares the value of ATTRIBUTE with VALUE using the comparation
864 method OPERATOR. If the comparation succeeds, it returns 0, else 1.
865 The operators are:
866
867 · =: ATTRIBUTE's value equals VALUE
868
869 · !=: ATTRIBUTE's value does not equal VALUE
870
871 · le: ATTRIBUTE's value <= VALUE
872
873 · lt: ATTRIBUTE's value < VALUE
874
875 · ge: ATTRIBUTE's value >= VALUE
876
877 · gt: ATTRIBUTE's value > VALUE
878
879 The OPERATORsle,lt,ge,gt can only be used if ATTRIBUTE is of the
880 type integer or unsigned integer. Note that the first parameter
881 must always be an attribute and the second a constant value. If you
882 want to compare two attributes, use the substitute command:
883
884 substitute FC tags.focus.frame_count \
885 compare tags.focus.client_count gt FC
886
887 It returns success if there are more clients on the focused tag
888 than frames.
889
890 getenv NAME
891 Gets the value of the environment variable NAME.
892
893 setenv NAME VALUE
894 Set the value of the environment variable NAME to VALUE.
895
896 unsetenv NAME
897 Unsets the environment variable NAME.
898
900 Settings configure the behaviour of herbstluftwm and can be controlled
901 via the set, get and toggle commands. There are two types of settings:
902 Strings and integer values. An integer value is set, if its value is 1
903 or another value unequal to 0. An integer value is unset, if its value
904 is 0.
905
906 frame_gap (Integer)
907 The gap between frames in the tiling mode.
908
909 frame_padding (Integer)
910 The padding within a frame in the tiling mode, i.e. the space
911 between the border of a frame and the windows within it.
912
913 window_gap (Integer)
914 The gap between windows within one frame in the tiling mode.
915
916 snap_distance (Integer)
917 If a client is dragged in floating mode, then it snaps to neighbour
918 clients if the distance between them is smaller then snap_distance.
919
920 snap_gap (Integer)
921 Specifies the remaining gap if a dragged client snaps to an edge in
922 floating mode. If snap_gap is set to 0, no gap will remain.
923
924 mouse_recenter_gap (Integer)
925 Specifies the gap around a monitor. If the monitor is selected and
926 the mouse position would be restored into this gap, it is set to
927 the center of the monitor. This is useful, when the monitor was
928 left via mouse movement, but is reselected by keyboard. If the gap
929 is 0 (default), the mouse is never recentered.
930
931 frame_border_active_color (String/Color)
932 The border color of a focused frame.
933
934 frame_border_normal_color (String/Color)
935 The border color of an unfocused frame.
936
937 frame_border_inner_color (String/Color)
938 The color of the inner border of a frame.
939
940 frame_bg_active_color (String/Color)
941 The fill color of a focused frame.
942
943 frame_bg_normal_color (String/Color)
944 The fill color of an unfocused frame (It is only visible if
945 always_show_frame is set).
946
947 frame_bg_transparent (Integer)
948 If set, the background of frames are transparent. That means a
949 rectangle is cut out frome the inner such that only the frame
950 border and a stripe of width frame_transparent_width can be seen.
951 Use frame_active_opacity and frame_normal_opacity for real
952 transparency.
953
954 frame_transparent_width (Integer)
955 Specifies the width of the remaining frame colored with
956 frame_bg_active_color if frame_bg_transparent is set.
957
958 frame_border_width (Integer)
959 Border width of a frame.
960
961 frame_border_inner_width (Integer)
962 The width of the inner border of a frame. Must be less than
963 frame_border_width, since it does not add to the frame border width
964 but is a part of it.
965
966 focus_crosses_monitor_boundaries (Integer)
967 If set, the focus command crosses monitor boundaries. If there is
968 no client in the direction given to focus, then the monitor in the
969 specified direction is focused.
970
971 raise_on_focus (Integer)
972 If set, a window is raised if it is focused. The value of this
973 setting is only used in floating mode.
974
975 raise_on_focus_temporarily (Integer)
976 If set, a window is raised temporarily if it is focused on its tag.
977 Temporarily in this case means that the window will return to its
978 previous stacking position if another window is focused.
979
980 raise_on_click (Integer)
981 If set, a window is raised if it is clicked. The value of this
982 setting is only noticed in floating mode.
983
984 window_border_width (Integer)
985 Border width of a window.
986
987 window_border_inner_width (Integer)
988 The width of the inner border of a window. Must be less than
989 window_border_width, since it does not add to the window border
990 width but is a part of it.
991
992 window_border_active_color (String/Color)
993 Border color of a focused window.
994
995 window_border_normal_color (String/Color)
996 Border color of an unfocused window.
997
998 window_border_urgent_color (String/Color)
999 Border color of an unfocused but urgent window.
1000
1001 window_border_inner_color (String/Color)
1002 Color of the inner border of a window.
1003
1004 always_show_frame (Integer)
1005 If set, all frames are displayed. If unset, only frames with focus
1006 or with windows in it are displayed.
1007
1008 frame_active_opacity (Integer)
1009 Focused frame opacity in percent. Requires a running compositing
1010 manager to take actual effect.
1011
1012 frame_normal_opacity (Integer)
1013 Unfocused frame opacity in percent. Requires a running compositing
1014 manager to take actual effect.
1015
1016 default_frame_layout (Integer)
1017 Index of the frame layout, which is used if a new frame is created
1018 (by split or on a new tag). For a list of valid indices and their
1019 meanings, check the list of layout algorithms above.
1020
1021 default_direction_external_only (Integer)
1022 This setting controls the behaviour of focus and shift if no -e or
1023 -i argument is given. if set, then focus and shift changes the
1024 focused frame even if there are other clients in this frame in the
1025 specified DIRECTION. Else, a client within current frame is
1026 selected if it is in the specified DIRECTION.
1027
1028 gapless_grid (Integer)
1029 This setting affects the size of the last client in a frame that is
1030 arranged by grid layout. If set, then the last client always fills
1031 the gap within this frame. If unset, then the last client has the
1032 same size as all other clients in this frame.
1033
1034 smart_frame_surroundings (Integer)
1035 If set, frame borders and gaps will be removed when there’s no
1036 ambiguity regarding the focused frame.
1037
1038 smart_window_surroundings (Integer)
1039 If set, window borders and gaps will be removed and minimal when
1040 there’s no ambiguity regarding the focused window. This minimal
1041 window decoration can be configured by the theme.minimal object.
1042
1043 focus_follows_mouse (Integer)
1044 If set and a window is focused by mouse cursor, this window is
1045 focused (this feature is also known as sloppy focus). If unset, you
1046 need to click to change the window focus by mouse.
1047
1048 If another window is hidden by the focus change (e.g. when having
1049 pseudotiled windows in the max layout) then an extra click is
1050 required to change the focus.
1051
1052 focus_stealing_prevention (Integer)
1053 If set, only pagers and taskbars are allowed to change the focus.
1054 If unset, all applications can request a focus change.
1055
1056 monitors_locked (Integer)
1057 If greater than 0, then the clients on all monitors aren’t moved or
1058 resized anymore. If it is set to 0, then the arranging of monitors
1059 is enabled again, and all monitors are rearranged if their content
1060 has changed in the meantime. You should not change this setting
1061 manually due to concurrency issues; use the commands lock and
1062 unlock instead.
1063
1064 swap_monitors_to_get_tag (Integer)
1065 If set: If you want to view a tag, that already is viewed on
1066 another monitor, then the monitor contents will be swapped and you
1067 see the wanted tag on the focused monitor. If not set, the other
1068 monitor is focused if it shows the desired tag.
1069
1070 auto_detect_monitors (Integer)
1071 If set, detect_monitors is automatically executed every time a
1072 monitor is connected, disconnected or resized.
1073
1074 tree_style (String)
1075 It contains the chars that are used to print a nice ascii tree. It
1076 must contain at least 8 characters. e.g. X|:#+*-. produces a tree
1077 like:
1078
1079 X-.root
1080 #-. child 0
1081 | #-* child 01
1082 | +-* child 02
1083 +-. child 1
1084 : #-* child 10
1085 : +-* child 01
1086
1087 Useful values for tree_style are: ╾│ ├└╼─┐ or -| |'--. or ╾│
1088 ├╰╼─╮.
1089
1090 wmname (String)
1091 It controls the value of the _NET_WM_NAME property on the root
1092 window, which specifies the name of the running window manager. The
1093 value of this setting is not updated if the actual _NET_WM_NAME
1094 property on the root window is changed externally. Example usage:
1095
1096 · cycle_value wmname herbstluftwm LG3D
1097
1098 pseudotile_center_threshold (Int)
1099 If greater than 0, it specifies the least distance between a
1100 centered pseudotile window and the border of the frame or tile it
1101 is assigned to. If this distance is lower than
1102 pseudotile_center_threshold, it is aligned to the top left of the
1103 client’s tile.
1104
1105 update_dragged_clients (Int)
1106 If set, a client’s window content is resized immediately during
1107 resizing it with the mouse. If unset, the client’s content is
1108 resized after the mouse button are released.
1109
1111 Rules are used to change default properties for certain clients when
1112 they appear. Each rule matches against a certain subset of all clients
1113 and defines a set of properties for them (called CONSEQUENCEs). A rule
1114 can be defined with this command:
1115
1116 rule [[--]FLAG|[--]LABEL|[--]CONDITION|[--]CONSEQUENCE ...]
1117
1118 Each rule consists of a list of FLAGs, CONDITIONs, CONSEQUENCEs and,
1119 optionally, a LABEL. (each of them can be optionally prefixed with two
1120 dashes (--) to provide a more iptables(8)-like feeling).
1121
1122 Each rule can be given a custom label by specifying the LABEL property:
1123
1124 · [--]label=VALUE
1125
1126 If multiple labels are specified, the last one in the list will be
1127 applied. If no label is given, then the rule will be given an integer
1128 name that represents the index of the rule since the last unrule -F
1129 command (which is triggered in the default autostart).
1130
1131 Tip
1132 Rule labels default to an incremental index. These default labels
1133 are unique, unless you assign a different rule a custom integer
1134 LABEL. Default labels can be captured with the printlabel flag.
1135
1136 If a new client appears, herbstluftwm tries to apply each rule to this
1137 new client as follows: If each CONDITION of this rule matches against
1138 this client, then every CONSEQUENCE is executed. (If there are no
1139 conditions given, then this rule is executed for each client)
1140
1141 Each CONDITION consists of a property name, an operator and a value.
1142 Valid operators are:
1143
1144 · ~ matches if client’s property is matched by the regex value.
1145
1146 · = matches if client’s properly string is equal to value.
1147
1148 Valid properties are:
1149
1150 instance
1151 the first entry in client’s WM_CLASS.
1152
1153 class
1154 the second entry in client’s WM_CLASS.
1155
1156 title
1157 client’s window title.
1158
1159 pid
1160 the client’s process id (Warning: the pid is not available for
1161 every client. This only matches if the client sets _NET_WM_PID to
1162 the pid itself).
1163
1164 maxage
1165 matches if the age of the rule measured in seconds does not exceed
1166 value. This condition only can be used with the = operator. If
1167 maxage already is exceeded (and never will match again), then this
1168 rule is removed. (With this you can build rules that only live for
1169 a certain time.)
1170
1171 windowtype
1172 matches the _NET_WM_WINDOW_TYPE property of a window.
1173
1174 windowrole
1175 matches the WM_WINDOW_ROLE property of a window if it is set by the
1176 window.
1177
1178 Each CONSEQUENCE consists of a NAME=VALUE pair. Valid NAMES are:
1179
1180 tag
1181 moves the client to tag VALUE.
1182
1183 monitor
1184 moves the client to the tag on monitor VALUE. If the tag
1185 consequence was also specified, and switchtag is set for the
1186 client, move the client to that tag, then display that tag on
1187 monitor VALUE. If the tag consequence was specified, but switchtag
1188 was not, ignore this consequence.
1189
1190 focus
1191 decides whether the client gets the input focus on his tag. The
1192 default is off. VALUE can be on, off or toggle.
1193
1194 switchtag
1195 if focus is activated and the client is put to a not focused tag,
1196 then switchtag tells whether the client’s tag will be shown or not.
1197 If the tag is shown on any monitor but is not focused, the client’s
1198 tag only is brought to the current monitor if
1199 swap_monitors_to_get_tag is activated. VALUE can be on, off or
1200 toggle.
1201
1202 manage
1203 decides whether the client will be managed or not. The default is
1204 on. VALUE can be on, off or toggle.
1205
1206 index
1207 moves the window to a specified index in the tree. VALUE is a
1208 frame index.
1209
1210 pseudotile
1211 sets the pseudotile state of the client. VALUE can be on, off or
1212 toggle.
1213
1214 ewmhrequests
1215 sets whether the window state (the fullscreen state and the demands
1216 attention flag) can be changed by the application via ewmh itself.
1217 This does not affect the initial fullscreen state requested by the
1218 window. VALUE can be on, off or toggle, it defaults to on.
1219
1220 ewmhnotify
1221 sets whether hlwm should let the client know about EMWH changes
1222 (currently only the fullscreen state). If this is set, applications
1223 do not change to their fullscreen-mode while still being
1224 fullscreen. VALUE can be on, off or toggle, it defaults to on.
1225
1226 fullscreen
1227 sets the fullscreen flag of the client. VALUE can be on, off or
1228 toggle.
1229
1230 hook
1231 emits the custom hook ruleVALUEWINID when this rule is triggered by
1232 a new window with the id WINID. This consequence can be used
1233 multiple times, which will cause a hook to be emitted for each
1234 occurrence of a hook consequence.
1235
1236 keymask
1237 Sets the keymask for an client. A keymask is an regular expression
1238 that is matched against the string represenation (see
1239 list_keybinds). If it matches the keybinding is active when this
1240 client is focused, otherwise it is disabled. The default keymask is
1241 an empty string (""), which does not disable any keybinding.
1242
1243 A rule’s behaviour can be configured by some special FLAGS:
1244
1245 · not: negates the next CONDITION.
1246
1247 · !: same as not.
1248
1249 · once: only apply this rule once (and delete it afterwards).
1250
1251 · printlabel: prints the label of the newly created rule to stdout.
1252
1253 · prepend: prepend the rule to the list of rules instead of appending
1254 it. So its consequences may be overwritten by already existing
1255 rules.
1256
1257 Examples:
1258
1259 · rule --class=Netscape --tag=6 --focus=off Moves all Netscape
1260 instances to tag 6, but doesn’t give focus to them.
1261
1262 · rule not class~.*[Tt]erm tag=2 Moves all clients to tag 2, if their
1263 class does not end with term or Term.
1264
1265 · rule class=Thunderbird index=/0 Insert all Thunderbird instances in
1266 the tree that has no focus and there in the first child.
1267
1268 · rule --windowtype=_NET_WM_WINDOW_TYPE_DIALOG --focus=on Sets focus
1269 to new dialogs which set their _NET_WM_WINDOW_TYPE correctly.
1270
1272 Several commands accept a window as reference, e.g. close. The syntax
1273 is as follows:
1274
1275 · an empty string — or missing argument — references the currently
1276 focused window.
1277
1278 · urgent references some window that is urgent.
1279
1280 · 0xHEXID — where HEXID is some hexadecimal number — references the
1281 window with hexadecimal X11 window id is HEXID.
1282
1283 · DECID — where DECID is some decimal number — references the window
1284 with the decimal X11 window id DECID.
1285
1287 Warning
1288 The object tree is not stable yet, i.e. its interface may change
1289 until the next stable release. So check this documentation again
1290 after upgrading the next time.
1291
1292 The object tree is a collection of objects with attributes similar to
1293 /sys known from the Linux kernel. Many entities (like tags, monitors,
1294 clients, ...) have objects to access their attributes directly. The
1295 tree is printed by the object_tree command and looks more or less as
1296 follows:
1297
1298 $ herbstclient object_tree
1299 ╾─┐
1300 ├─┐ tags
1301 │ ├─┐ by-name
1302 │ │ ├─╼ 1
1303 │ │ ...
1304 │ │ └─╼ 9
1305 │ └─╼ focus
1306 ├─┐ clients
1307 │ ├─╼ 0x1400022
1308 │ └─╼ focus
1309 └─┐ monitors
1310 ├─╼ by-name
1311 └─╼ focus
1312
1313 To print a subtree starting at a certain object, pass the PATH of the
1314 object to object_tree. The object PATH is the path using the separator
1315 . (dot), e.g. tags.by-name:
1316
1317 $ herbstclient object_tree tags.by-name.
1318 ╾─┐ tags.by-name.
1319 ├─╼ 1
1320 ├─╼ 2
1321 ...
1322 └─╼ 9
1323
1324 To query all attributes and children of a object, pass its PATH to
1325 attr:
1326
1327 $ herbstclient attr tags.
1328 2 children:
1329 by-name.
1330 focus.
1331
1332 1 attributes:
1333 .---- type
1334 | .-- writeable
1335 V V
1336 u - count = 9
1337
1338 $ herbstclient attr tags.focus.
1339 0 children.
1340 6 attributes:
1341 .---- type
1342 | .-- writeable
1343 V V
1344 s w name = "1"
1345 b w floating = false
1346 i - frame_count = 2
1347 i - client_count = 1
1348 i - curframe_windex = 0
1349 i - curframe_wcount = 1
1350
1351 This already gives an intuition of the output: attr first lists the
1352 names of the child objects and then all attributes, telling for each
1353 attribute:
1354
1355 · its type
1356
1357 · s for string
1358
1359 · i for integer
1360
1361 · b for boolean
1362
1363 · u for unsigned integer
1364
1365 · if it is writeable by the user: w if yes, - else.
1366
1367 · the name of the attribute
1368
1369 · its current value (only quoted for strings)
1370
1371 To get the unquoted value of a certain attribute, address the attribute
1372 using the same syntax as for object paths and pass it to attr or
1373 get_attr:
1374
1375 $ herbstclient attr clients.focus.title
1376 herbstluftwm.txt = (~/dev/c/herbstluftwm/doc) - VIM
1377 $ herbstclient get_attr clients.focus.title
1378 herbstluftwm.txt = (~/dev/c/herbstluftwm/doc) - VIM
1379
1380 To change a writeable attribute value pass the new value to attr or to
1381 set_attr:
1382
1383 $ herbstclient attr tags.focus.floating
1384 false
1385 $ herbstclient attr tags.focus.floating true
1386 $ herbstclient attr tags.focus.floating
1387 true
1388 $ herbstclient set_attr tags.focus.floating false
1389 $ herbstclient attr tags.focus.floating
1390 false
1391
1392 Just look around to get a feeling what is there. The detailed tree
1393 content is listed as follows:
1394
1395 · tags: subtree for tags.
1396
1397 ┌──────────┬────────────────┐
1398 │u - count │ number of tags │
1399 └──────────┴────────────────┘
1400
1401 · by-name
1402
1403 · TAG: a object for each tag with the name TAG
1404
1405 ┌────────────────────┬────────────────────────────┐
1406 │s w name │ name of the tag │
1407 ├────────────────────┼────────────────────────────┤
1408 │b w floating │ if it is in floating mode │
1409 ├────────────────────┼────────────────────────────┤
1410 │i - index │ index of this tag │
1411 ├────────────────────┼────────────────────────────┤
1412 │i - frame_count │ number of frames │
1413 ├────────────────────┼────────────────────────────┤
1414 │i - client_count │ number of clients on this │
1415 │ │ tag │
1416 ├────────────────────┼────────────────────────────┤
1417 │i - curframe_windex │ index of the focused │
1418 │ │ client in the select frame │
1419 ├────────────────────┼────────────────────────────┤
1420 │i - curframe_wcount │ number of clients in the │
1421 │ │ selected frame │
1422 └────────────────────┴────────────────────────────┘
1423
1424 · focus: the object of the focused tag
1425
1426 · clients
1427
1428 · WINID: a object for each client with its WINID
1429
1430 ┌───────────────────────┬────────────────────────────┐
1431 │s - winid │ its window id │
1432 ├───────────────────────┼────────────────────────────┤
1433 │s - title │ its window title │
1434 ├───────────────────────┼────────────────────────────┤
1435 │s - tag │ the tag it’s currently on │
1436 ├───────────────────────┼────────────────────────────┤
1437 │i - pid │ the process id of it (-1 │
1438 │ │ if unset) │
1439 ├───────────────────────┼────────────────────────────┤
1440 │s - class │ the class of it (second │
1441 │ │ entry in WM_CLASS) │
1442 ├───────────────────────┼────────────────────────────┤
1443 │s - instance │ the instance of it (first │
1444 │ │ entry in WM_CLASS) │
1445 ├───────────────────────┼────────────────────────────┤
1446 │b w fullscreen │ │
1447 ├───────────────────────┼────────────────────────────┤
1448 │b w pseudotile │ │
1449 ├───────────────────────┼────────────────────────────┤
1450 │b w ewmhrequests │ if ewmh requests are │
1451 │ │ permitted for this client │
1452 ├───────────────────────┼────────────────────────────┤
1453 │b w ewmhnotify │ if the client is told │
1454 │ │ about its state via ewmh │
1455 ├───────────────────────┼────────────────────────────┤
1456 │b w urgent │ its urgent state │
1457 ├───────────────────────┼────────────────────────────┤
1458 │b w sizehints_tiling │ if sizehints for this │
1459 │ │ client should be respected │
1460 │ │ in tiling mode │
1461 ├───────────────────────┼────────────────────────────┤
1462 │b w sizehints_flaoting │ if sizehints for this │
1463 │ │ client should be respected │
1464 │ │ in floating mode │
1465 └───────────────────────┴────────────────────────────┘
1466
1467 · focus: the object of the focused client, if any
1468
1469 · dragged: the object of a client which is dragged by the mouse,
1470 if any. See the documentation of the mousebind command for
1471 examples.
1472
1473 · monitors
1474
1475 ┌──────────┬────────────────────┐
1476 │u - count │ number of monitors │
1477 └──────────┴────────────────────┘
1478
1479 · INDEX: a object for each monitor with its INDEX
1480
1481 · by-name
1482
1483 · NAME: a object for each named monitor
1484
1485 ┌─────────────┬──────────────────────────┐
1486 │s - name │ its name │
1487 ├─────────────┼──────────────────────────┤
1488 │i - index │ its index │
1489 ├─────────────┼──────────────────────────┤
1490 │s - tag │ the tag currently viewed │
1491 │ │ on it │
1492 ├─────────────┼──────────────────────────┤
1493 │b - lock_tag │ │
1494 └─────────────┴──────────────────────────┘
1495
1496 · focus: the object of the focused monitor
1497
1498 · settings has an attribute for each setting. See SETTINGS for a
1499 list.
1500
1501 · theme has attributes to configure the window decorations. theme
1502 and many of its child objects have the following attributes
1503
1504 ┌─────────────────────┬────────────────────────────┐
1505 │i w border_width │ the base width of the │
1506 │ │ border │
1507 ├─────────────────────┼────────────────────────────┤
1508 │i w padding_top │ additional border width on │
1509 │ │ the top │
1510 ├─────────────────────┼────────────────────────────┤
1511 │i w padding_right │ on the right │
1512 ├─────────────────────┼────────────────────────────┤
1513 │i w padding_bottom │ on the bottom │
1514 ├─────────────────────┼────────────────────────────┤
1515 │i w padding_left │ and on the left of the │
1516 │ │ border │
1517 ├─────────────────────┼────────────────────────────┤
1518 │c w color │ the basic background color │
1519 │ │ of the border │
1520 ├─────────────────────┼────────────────────────────┤
1521 │i w inner_width │ width of the border around │
1522 │ │ the clients content │
1523 ├─────────────────────┼────────────────────────────┤
1524 │c w inner_color │ its color │
1525 ├─────────────────────┼────────────────────────────┤
1526 │i w outer_width │ width of an additional │
1527 │ │ border close to the edge │
1528 ├─────────────────────┼────────────────────────────┤
1529 │c w outer_color │ its color │
1530 ├─────────────────────┼────────────────────────────┤
1531 │c w background_color │ color behind window │
1532 │ │ contents visible on resize │
1533 ├─────────────────────┼────────────────────────────┤
1534 │s w reset │ Writing this resets all │
1535 │ │ attributes to a default │
1536 │ │ value │
1537 └─────────────────────┴────────────────────────────┘
1538
1539 inner_color/inner_width
1540 ╻ outer_color/outer_width
1541 │ ╻
1542 │ │
1543 ┌────╴│╶─────────────────┷─────┐ ╮ border_width
1544 │ │ color │ ┝ +
1545 │ ┌──┷─────────────────────┐ │ ╯ padding_top
1546 │ │====================....│ │
1547 │ │== window content ==....│ │
1548 │ │====================..╾──────── background_color
1549 │ │........................│ │
1550 │ └────────────────────────┘ │ ⎱ border_width +
1551 └──────────────────────────────┘ ⎰ padding_bottom
1552
1553 Setting an attribute of the theme object just propagates the value
1554 to the respective attribute of the tiling and the floating object.
1555
1556 · tiling configures the decoration of tiled clients, setting one
1557 of its attributes propagates the respective attribute of the
1558 active, normal and urgent child objects.
1559
1560 · active configures the decoration of focused and tiled
1561 clients
1562
1563 · normal configures the decoration of unfocused and tiled
1564 clients
1565
1566 · urgent configures the decoration of urgent and tiled
1567 clients
1568
1569 · floating behaves analogously to tiling
1570
1571 · minimal behaves analogously to tiling and configures those
1572 minimal decorations triggered by smart_window_surroundings.
1573
1574 · active propagates the attribute values to tiling.active and
1575 floating.active
1576
1577 · normal propagates the attribute values to tiling.normal and
1578 floating.normal
1579
1580 · urgent propagates the attribute values to tiling.urgent and
1581 floating.urgent
1582
1584 There is no configuration file but an autostart file, which is executed
1585 on startup. It is also executed on command reload. If not specified by
1586 the --autostart argument, autostart file is located at
1587 $XDG_CONFIG_HOME/herbstluftwm/autostart or at
1588 ~/.config/herbstluftwm/autostart. Normally it consists of a few
1589 herbstclient calls. If executing the autostart file in a user’s home
1590 fails the global autostart file (mostly placed at
1591 /etc/xdg/herbstluftwm/autostart) is executed as a fallback.
1592
1593 For a quick install, copy the default autostart file to
1594 ~/.config/herbstluftwm/.
1595
1597 On special events, herbstluftwm emits some hooks (with parameters). You
1598 can receive or wait for them with herbstclient(1). Also custom hooks
1599 can be emitted with the emit_hook command. The following hooks are
1600 emitted by herbstluftwm itself:
1601
1602 fullscreen [on|off] WINID STATE
1603 The fullscreen state of window WINID was changed to [on|off].
1604
1605 tag_changed TAG MONITOR
1606 The tag TAG was selected on MONITOR.
1607
1608 focus_changed WINID TITLE
1609 The window WINID was focused. Its window title is TITLE.
1610
1611 window_title_changed WINID TITLE
1612 The title of the focused window was changed. Its window id is WINID
1613 and its new title is TITLE.
1614
1615 tag_flags
1616 The flags (i.e. urgent or filled state) have been changed.
1617
1618 tag_added TAG
1619 A tag named TAG was added.
1620
1621 tag_removed TAG
1622 The tag named TAG was removed.
1623
1624 urgent [on|off] WINID
1625 The urgent state of client with given WINID has been changed to
1626 [on|off].
1627
1628 rule NAME WINID
1629 A window with the id WINID appeared which triggerd a rule with the
1630 consequence hook=NAME.
1631
1632 There are also other useful hooks, which never will be emitted by
1633 herbstluftwm itself, but which can be emitted with the emit_hook
1634 command:
1635
1636 quit_panel
1637 Tells a panel to quit. The default panel.sh quits on this hook.
1638 Many scripts are using this hook.
1639
1640 reload
1641 Tells all daemons that the autostart file is reloaded — and tells
1642 them to quit. This hook should be emitted in the first line of
1643 every autostart file.
1644
1646 Every tag has its own stack of clients that are on this tag. Similar to
1647 the EWMH specification each tag stack contains several layers, which
1648 are from top to bottom:
1649
1650 · the focused client (if raise_on_focus_temporarily is enabled)
1651
1652 · clients in fullscreen
1653
1654 · normal clients
1655
1656 · frame decorations
1657
1658 All monitors are managed in one large stack which only consists of the
1659 stacks of the visible tags put above each other. The stacking order of
1660 these monitors is independent from their indices and can be modified
1661 using the raise_monitor command. The current stack is illustrated by
1662 the stack command.
1663
1665 DISPLAY
1666 Specifies the DISPLAY to use.
1667
1669 Returns 0 on success. Returns EXIT_FAILURE if it cannot startup or if
1670 wmexec fails.
1671
1673 See the herbstluftwm distribution BUGS file.
1674
1676 Feel free to join the IRC channel #herbstluftwm on irc.freenode.net.
1677
1679 herbstluftwm was written by Thorsten Wißmann. All contributors are
1680 listed in the herbstluftwm distribution AUTHORS file.
1681
1683 Homepage: http://herbstluftwm.org
1684
1685 Gitweb: http://git.cs.fau.de/?p=re06huxa/herbstluftwm
1686
1687 Patch submission and bug reporting:
1688
1689 hlwm@lists.herbstluftwm.org
1690
1692 Copyright 2011-2014 Thorsten Wißmann. All rights reserved.
1693
1694 This software is licensed under the "Simplified BSD License". See
1695 LICENSE for details.
1696
1697
1698
1699 herbstluftwm 0.6.2\ 2014-03-27 HERBSTLUFTWM(1)