[[doc_cls_root]]



=== autostart: [[doc_cls_autostart]]


     * '[datatype]#string#' *+[entryname]#global_path#+* [defaultvalue]#= globalAutostart#: Path of the system-wide autostart, used as a fallback.

     * '[datatype]#int#' *+[entryname]#last_status#+* [defaultvalue]#= 0#: the exit status of the last autostart run. if the autostart is still '+++running+++', then this status corresponds to the exit status of the previous autostart invocation.

     * '[datatype]#string#' *+[entryname]#path#+* [defaultvalue]#= autostartFromCmdLine#: Custom path to the user's autostart path. If it is empty, then the autostart in $XDG_CONFIG_HOME or $HOME is used.

     * '[datatype]#uint#' *+[entryname]#pid#+* [defaultvalue]#= 0#: the process id of the last autostart invocation. Even if the autostart is not running anymore, its pid is still present here.

     * '[datatype]#bool#' *+[entryname]#running#+* [defaultvalue]#= false#: whether the autostart process (with '+++pid+++') is still running.


=== clients: [[doc_cls_clientmanager]]
The managed windows. For every (managed) window id there is an entry here.


     * *+[entryname]#dragged#+*: the object of a client which is currently dragged by the mouse, if any. See the documentation of the mousebind command for examples. For attributes and children, see <<doc_cls_client,+clients.focus+>>

     * *+[entryname]#focus#+*: the focused client (only exists if a client is focused). [[doc_cls_client]]a managed window


       ** '[datatype]#string#' *+[entryname]#class#+*: the class of it (second entry in WM_CLASS)

       ** '[datatype]#Rectangle#' *+[entryname]#content_geometry#+*: the geometry of the application content, that is, not taking the decoration into account. Also, this is the last window geometry that was reported to the client application.

       ** '[datatype]#bool#' *+[entryname]#decorated#+* [defaultvalue]#= true#: whether window border and title are drawn

       ** '[datatype]#Rectangle#' *+[entryname]#decoration_geometry#+*: the geometry of the client, taking the window decoration into account. The position is the global window position, that is, relative to the top left corner of the entire screen

       ** '[datatype]#bool#' *+[entryname]#ewmhnotify#+* [defaultvalue]#= true#: if the client is told about its state via ewmh

       ** '[datatype]#bool#' *+[entryname]#ewmhrequests#+* [defaultvalue]#= true#: if ewmh requests are permitted for this client

       ** '[datatype]#bool#' *+[entryname]#floating#+* [defaultvalue]#= false#: whether this client is set as a (single-window) floating client. If set, the client is floated above the tiled clients.

       ** '[datatype]#bool#' *+[entryname]#floating_effectively#+* [defaultvalue]#= false#: whether this client is in the floating state currently. This is the case if the client's tag is set to floating mode or if the client itself is set as floating. Its value is also indicated via the X11 properties HLWM_FLOATING_WINDOW and HLWM_TILING_WINDOW.

       ** '[datatype]#Rectangle#' *+[entryname]#floating_geometry#+* [defaultvalue]#= 0#: the geometry of the client content if the client is in floating mode. The position is relative to the monitor and does not take the window decoration into account.

       ** '[datatype]#bool#' *+[entryname]#fullscreen#+* [defaultvalue]#= false#: whether this client covers all other windows and panels on its monitor.

       ** '[datatype]#string#' *+[entryname]#instance#+*: the instance of it (first entry in WM_CLASS)

       ** '[datatype]#regex#' *+[entryname]#keymask#+* [defaultvalue]#= ""#: A regular expression that is matched against the string representation of all key bindings (as they are printed by list_keybinds). While this client is focused, only bindings that match the expression will be active. Any other bindings will be disabled. The default keymask is an empty string (), which does not disable any keybinding.

       ** '[datatype]#regex#' *+[entryname]#keys_inactive#+* [defaultvalue]#= ""#: A regular expression that describes which keybindings are inactive while the client is focused. If a key combination is pressed and its string representation (as given by list_keybinds) matches the regex, then the key press is propagated to the client.

       ** '[datatype]#bool#' *+[entryname]#minimized#+* [defaultvalue]#= false#: whether this client is minimized (also called iconified).

       ** '[datatype]#int#' *+[entryname]#pgid#+* [defaultvalue]#= -1#

       ** '[datatype]#int#' *+[entryname]#pid#+* [defaultvalue]#= -1#: the process id of it (-1 if unset).

       ** '[datatype]#bool#' *+[entryname]#pseudotile#+* [defaultvalue]#= false#: if activated, the client always has its floating window size, even if it is in tiling mode.

       ** '[datatype]#bool#' *+[entryname]#sizehints_floating#+* [defaultvalue]#= true#: if sizehints for this client should be respected in floating mode

       ** '[datatype]#bool#' *+[entryname]#sizehints_tiling#+* [defaultvalue]#= false#: if sizehints for this client should be respected in tiling mode

       ** '[datatype]#bool#' *+[entryname]#sticky#+* [defaultvalue]#= false#: whether this client is pinned to the monitor. This means that the client stays on its monitor, even when the monitor switches to another tag.

       ** '[datatype]#string#' *+[entryname]#tag#+*: the name of the tag it's currently on.

       ** '[datatype]#string#' *+[entryname]#title#+* [defaultvalue]#= ""#: its window title

       ** '[datatype]#bool#' *+[entryname]#urgent#+* [defaultvalue]#= false#: the urgency state (also known as: demands attention). The focused client can not be urgent.

       ** '[datatype]#bool#' *+[entryname]#visible#+* [defaultvalue]#= visible_already#: whether this client is rendered currently

       ** '[datatype]#string#' *+[entryname]#winid#+* [defaultvalue]#= ""#: its window id (as a hexadecimal number with 0x prefix)

       ** *+[entryname]#parent_frame#+*: the frame contaning this client if the client is tiled. For attributes and children, see <<doc_cls_frameleaf,+tags.focus.tiling.root+>>


=== monitors: [[doc_cls_monitormanager]]
Every monitor is a rectangular part of the screen on which a tag is shown. These monitors may or may not match the actual outputs.
This has an entry '+++INDEX+++' for each monitor with index '+++INDEX+++'.


     * '[datatype]#uint#' *+[entryname]#count#+*

     * '[datatype]#TagSelectionStrategy#' *+[entryname]#tag_selection_strategy#+* [defaultvalue]#= any_unshown#: How to select a tag when a new monitor is created. 
- '+++any_unshown+++': select the first tag that is not shown on any monitor
- '+++only_empty+++': select the first empty tag that isn'+++t shown, abort if none is available
- +++'prefer_empty': prefer an empty tag, but select any unshown tag if no empty tag is available

     * *+[entryname]#by-name#+*: [[doc_cls_byname]]This has an entry '+++name+++' for every object with the given '+++name+++'. If an object has an empty name then it is not listed here.


     * *+[entryname]#focus#+*: the focused monitor. [[doc_cls_monitor]]The monitor is a rectangular part on the screen that holds precisely one tag at a time. The pad attributes reserve space on the monitor's edge for panels, so this space (given in number of pixels) is never occupied by tiled clients.


       ** '[datatype]#Rectangle#' *+[entryname]#content_geometry#+*: the inner geometry of the monitor, i.e. the geometry with the pads deducted from all sides. This is the area floating and tiled client windows are placed.

       ** '[datatype]#Rectangle#' *+[entryname]#geometry#+* [defaultvalue]#= rect_#: the outer geometry of the monitor

       ** '[datatype]#uint#' *+[entryname]#index#+* [defaultvalue]#= 0#: the monitor's index (starts at index 0)

       ** '[datatype]#bool#' *+[entryname]#lock_tag#+* [defaultvalue]#= false#: if activated, then it it is not possible to switch this monitor to a different tag.

       ** '[datatype]#string#' *+[entryname]#name#+* [defaultvalue]#= ""#: the monitor's name (can be empty)

       ** '[datatype]#int#' *+[entryname]#pad_down#+* [defaultvalue]#= 0#: space for panels at the monitor's lower edge

       ** '[datatype]#int#' *+[entryname]#pad_left#+* [defaultvalue]#= 0#: space for panels at the monitor's left edge

       ** '[datatype]#int#' *+[entryname]#pad_right#+* [defaultvalue]#= 0#: space for panels at the monitor's right edge

       ** '[datatype]#int#' *+[entryname]#pad_up#+* [defaultvalue]#= 0#: space for panels at the monitor's upper edge

       ** '[datatype]#string#' *+[entryname]#tag#+*: the name of the tag viewed here


=== panels: [[doc_cls_panelmanager]]
For every panel window, there is an entry with the panel's window id here.


     * '[datatype]#uint#' *+[entryname]#count#+*

     * '[datatype]#bool#' *+[entryname]#geometry_fallback#+* [defaultvalue]#= false#: when auto-detecting panels: if a panel does not specify the amount of space it needs at the monitor edge, fall back to reserve the panel's geometryat the screen edge.

     * '[entryname]#0xWindowID#': [[doc_cls_panel]]a panel is an unmanaged window that reserves space at the edge of the monitor it is on. The space depends on the _NET_WM_STRUT defined by the panel. If it is however not defined explicitly, then the amount of reserved space is inferred from the window geometry.


       ** '[datatype]#string#' *+[entryname]#class#+*: the window class (second entry of WM_CLASS)

       ** '[datatype]#Rectangle#' *+[entryname]#geometry#+*: the size and position of the window

       ** '[datatype]#string#' *+[entryname]#instance#+*: the window instance (first entry of WM_CLASS)

       ** '[datatype]#WindowID#' *+[entryname]#winid#+* [defaultvalue]#= winid#: the ID of the panel window


=== settings: [[doc_cls_settings]]
Settings configure the general behaviour of herbstluftwm and can be controlled via the '+++set+++', '+++get+++' and '+++toggle+++' commands. The settings. object has an attribute for each setting. Many settings are wrappers around attributes and only remain for compatibility.


     * '[datatype]#bool#' *+[entryname]#always_show_frame#+* [defaultvalue]#= false#: DEPRECATED, use +show_frame_decorations+ instead. If set, '+++show_frame_decorations+++' will be set to '+++all+++' (or '+++focused+++' if unset).

     * '[datatype]#bool#' *+[entryname]#auto_detect_monitors#+* [defaultvalue]#= false#: If set, detect_monitors is automatically executed every time a monitor is connected, disconnected or resized.

     * '[datatype]#bool#' *+[entryname]#auto_detect_panels#+* [defaultvalue]#= true#: If set, EWMH panels are automatically detected and reserve space at the side of the monitors they are on (via pad attributes of each monitor). This setting is activated per default.

     * '[datatype]#bool#' *+[entryname]#default_direction_external_only#+* [defaultvalue]#= false#: This setting controls the behaviour of focus and shift if no '+++-e+++' or '+++-i+++' argument is given. If set, then focus and shift changes the focused frame even if there are other clients in this frame in the specified '+++DIRECTION+++'. Else, a client within current frame is selected if it is in the specified '+++DIRECTION+++'.

     * '[datatype]#LayoutAlgorithm#' *+[entryname]#default_frame_layout#+* [defaultvalue]#= vertical#: Name of the layout algorithm, which is used if a new frame is created (on a new tag or by a non-trivial split). See above for the <<LIST_LAYOUT_ALGORITHMS,list of layout algorithms>>.

     * '[datatype]#string#' *+[entryname]#ellipsis#+* [defaultvalue]#= ...#: string to append when window or tab titles are shortened to fit in the available space.

     * '[datatype]#bool#' *+[entryname]#focus_crosses_monitor_boundaries#+* [defaultvalue]#= true#: If set, commands +focus+ and +shift+ cross monitor boundaries. If there is no client in the direction given to +focus+, then the monitor in the specified direction is focused. Similarly, if +shift+ cannot move a window within a tag, the window is moved to the neighbour monitor in the desired direction.

     * '[datatype]#bool#' *+[entryname]#focus_follows_mouse#+* [defaultvalue]#= false#: If set and a window is focused by mouse cursor, this window is focused (this feature is also known as sloppy focus). If unset, you need to click to change the window focus by mouse. +
 +
If another window is hidden by the focus change (e.g. when having pseudotiled windows in the max layout) then an extra click is required to change the focus.

     * '[datatype]#bool#' *+[entryname]#focus_stealing_prevention#+* [defaultvalue]#= true#: If set, only pagers and taskbars are allowed to change the focus. If unset, all applications can request a focus change.

     * '[datatype]#int#' *+[entryname]#frame_active_opacity#+* [defaultvalue]#= 100#: Focused frame opacity in percent. Requires a running compositing manager to take actual effect.

     * '[datatype]#color#' *+[entryname]#frame_bg_active_color#+* [defaultvalue]#= black#: The fill color of a focused frame.

     * '[datatype]#color#' *+[entryname]#frame_bg_normal_color#+* [defaultvalue]#= black#: The fill color of an unfocused frame (It is only visible if non-focused frames are configured to be visible, see '+++show_frame_decorations+++').

     * '[datatype]#bool#' *+[entryname]#frame_bg_transparent#+* [defaultvalue]#= false#: If set, the background of frames are transparent. That means a rectangle is cut out from the inner such that only the frame border and a stripe of width '+++frame_transparent_width+++' can be seen. Use '+++frame_active_opacity+++' and '+++frame_normal_opacity+++' for real transparency.

     * '[datatype]#color#' *+[entryname]#frame_border_active_color#+* [defaultvalue]#= red#: The border color of a focused frame.

     * '[datatype]#color#' *+[entryname]#frame_border_inner_color#+* [defaultvalue]#= black#: The color of the inner border of a frame.

     * '[datatype]#int#' *+[entryname]#frame_border_inner_width#+* [defaultvalue]#= 0#: The width of the inner border of a frame. Must be less than '+++frame_border_width+++', since it does not add to the frame border width but is a part of it.

     * '[datatype]#color#' *+[entryname]#frame_border_normal_color#+* [defaultvalue]#= blue#: The border color of an unfocused frame.

     * '[datatype]#int#' *+[entryname]#frame_border_width#+* [defaultvalue]#= 2#: Border width of a frame.

     * '[datatype]#int#' *+[entryname]#frame_gap#+* [defaultvalue]#= 5#: The gap between frames in the tiling mode.

     * '[datatype]#int#' *+[entryname]#frame_normal_opacity#+* [defaultvalue]#= 100#: Unfocused frame opacity in percent. Requires a running compositing manager to take actual effect.

     * '[datatype]#int#' *+[entryname]#frame_padding#+* [defaultvalue]#= 0#: The padding within a frame in the tiling mode, i.e. the space between the border of a frame and the windows within it.

     * '[datatype]#int#' *+[entryname]#frame_transparent_width#+* [defaultvalue]#= 0#: Specifies the width of the remaining frame colored with '+++frame_bg_active_color+++' if '+++frame_bg_transparent+++' is set.

     * '[datatype]#bool#' *+[entryname]#gapless_grid#+* [defaultvalue]#= true#: This setting affects the size of the last client in a frame that is arranged by grid layout. If set, then the last client always fills the gap within this frame. If unset, then the last client has the same size as all other clients in this frame.

     * '[datatype]#bool#' *+[entryname]#hide_covered_windows#+* [defaultvalue]#= false#: If activated, windows are explicitly hidden when they are covered by another window in a frame with max layout. This only has a visible effect if a compositor is used. If activated, shadows do not stack up and transparent windows show the wallpaper behind them instead of the other clients in the max layout.

     * '[datatype]#uint#' *+[entryname]#monitors_locked#+* [defaultvalue]#= 0#: If greater than 0, then the clients on all monitors aren't moved or resized anymore. If it is set to 0, then the arranging of monitors is enabled again, and all monitors are rearranged if their content has changed in the meantime. You should not change this setting manually due to concurrency issues; use the commands *lock* and *unlock* instead.

     * '[datatype]#int#' *+[entryname]#mouse_recenter_gap#+* [defaultvalue]#= 0#: Specifies the gap around a monitor. If the monitor is selected and the mouse position would be restored into this gap, it is set to the center of the monitor. This is useful, when the monitor was left via mouse movement, but is reselected by keyboard. If the gap is 0 (default), the mouse is never recentered.

     * '[datatype]#int#' *+[entryname]#pseudotile_center_threshold#+* [defaultvalue]#= 10#: If greater than 0, it specifies the least distance between a centered pseudotile window and the border of the frame or tile it is assigned to. If this distance is lower than '+++pseudotile_center_threshold+++', it is aligned to the top left of the client's tile.

     * '[datatype]#bool#' *+[entryname]#raise_on_click#+* [defaultvalue]#= true#: If set, a window is raised if it is clicked. The value of this setting is only noticed in floating mode.

     * '[datatype]#bool#' *+[entryname]#raise_on_focus#+* [defaultvalue]#= false#: If set, a window is raised if it is focused. The value of this setting is only used in floating mode.

     * '[datatype]#bool#' *+[entryname]#raise_on_focus_temporarily#+* [defaultvalue]#= false#: If set, a window is raised temporarily if it is focused on its tag. Temporarily in this case means that the window will return to its previous stacking position if another window is focused.

     * '[datatype]#ShowFrameDecorations#' *+[entryname]#show_frame_decorations#+* [defaultvalue]#= focused_if_multiple#: This controls, which frame decorations are shown at all. 
- '+++none+++' shows no frame decorations at all, 
- '+++nonempty+++' shows decorations of frames that have client windows, 
- '+++if_multiple+++' shows decorations on the tags with at least two frames, 
- '+++if_empty+++' shows decorations of frames that have no client windows, 
- '+++if_multiple_empty+++' shows decorations of frames that have no client windows on tags with at least two frames, 
- '+++focused+++' shows the decoration of focused and nonempty frames, 
- '+++focused_if_multiple+++' shows decorations of focused and non-empty frames on tags with at least two frames.
- '+++all+++' shows all frame decorations.

     * '[datatype]#SmartFrameSurroundings#' *+[entryname]#smart_frame_surroundings#+* [defaultvalue]#= off#: If set to '+++hide_all+++', frame borders and gaps will be removed when there is no ambiguity regarding the focused frame. If set to '+++hide_gaps+++', only frame gaps will be removed when there is no ambiguity regarding the focused frame. Turn '+++off+++' to always show frame borders and gaps.

     * '[datatype]#SmartWindowSurroundings#' *+[entryname]#smart_window_surroundings#+* [defaultvalue]#= off#: If set to '+++one_window+++' (or '+++on+++'), then window borders and gaps will be hidden in each frame that shows only one window. If set to '+++one_window_and_frame+++', then only those frames are affected that are the only frame on their tag. Still, these hidden decorations can be configured by the +theme.minimal+ object. Turn '+++off+++' to always show window borders and gaps.

     * '[datatype]#int#' *+[entryname]#snap_distance#+* [defaultvalue]#= 10#: If a client is dragged in floating mode, then it snaps to neighbour clients if the distance between them is smaller than snap_distance.

     * '[datatype]#int#' *+[entryname]#snap_gap#+* [defaultvalue]#= 5#: Specifies the remaining gap if a dragged client snaps to an edge in floating mode. If snap_gap is set to 0, no gap will remain.

     * '[datatype]#bool#' *+[entryname]#swap_monitors_to_get_tag#+* [defaultvalue]#= true#: If set: If you want to view a tag, that already is viewed on another monitor, then the monitor contents will be swapped and you see the wanted tag on the focused monitor. If not set, the other monitor is focused if it shows the desired tag.

     * '[datatype]#bool#' *+[entryname]#tabbed_max#+* [defaultvalue]#= true#: if activated, multiple windows in a frame with the '+++max+++' layout algorithm are drawn as tabs.

     * '[datatype]#string#' *+[entryname]#tree_style#+* [defaultvalue]#= "&#42;| &#43;`--."#: It contains the chars that are used to print a nice ascii tree. It must contain at least 8 characters. e.g. ++X|:&#35;+&#42;-.++ produces a tree like:
+
----
X-.
  #-. child 0
  | #-* child 00
  | +-* child 01
  +-. child 1
  : #-* child 10
  : +-* child 11
----
+
Useful values for '+++tree_style+++' are: +╾│ ├└╼─┐+ or +-| |&#39;--.+ or +╾│ ├╰╼─╮+.

     * '[datatype]#bool#' *+[entryname]#update_dragged_clients#+* [defaultvalue]#= false#: If set, a client'+++s window content is resized immediately during resizing it with the mouse. If unset, the client+++'s content is resized after the mouse button is released.

     * '[datatype]#bool#' *+[entryname]#verbose#+* [defaultvalue]#= false#: If set, verbose output is logged to herbstluftwm's stderr. The default value is controlled by the *--verbose* command line flag.

     * '[datatype]#color#' *+[entryname]#window_border_active_color#+*: Border color of a focused window. +
 +
*Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.active.color+.

     * '[datatype]#color#' *+[entryname]#window_border_inner_color#+*: Color of the inner border of a window. *Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.inner_color+.

     * '[datatype]#int#' *+[entryname]#window_border_inner_width#+*: The width of the inner border of a window. Must be less than window_border_width, since it does not add to the window border width but is a part of it. +
 +
*Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.inner_width+.

     * '[datatype]#color#' *+[entryname]#window_border_normal_color#+*: Border color of an unfocused window. +
 +
*Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.normal.color+.

     * '[datatype]#color#' *+[entryname]#window_border_urgent_color#+*: Border color of an unfocused but urgent window.  +
 +
*Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.urgent.color+.

     * '[datatype]#int#' *+[entryname]#window_border_width#+*: Border width of a window. +
 +
*Warning:* This only exists for compatibility reasons; it is only an alias for the attribute +theme.border_width+.

     * '[datatype]#int#' *+[entryname]#window_gap#+* [defaultvalue]#= 0#: The gap between windows within one frame in the tiling mode.

     * '[datatype]#string#' *+[entryname]#wmname#+* [defaultvalue]#= herbstluftwm#: It controls the value of the +_NET_WM_NAME+ property on the root window, which specifies the name of the running window manager. The value of this setting is not updated if the actual +_NET_WM_NAME+ property on the root window is changed externally. Example usage: +
 +
  *** +cycle_value wmname herbstluftwm LG3D+


=== tags: [[doc_cls_tagmanager]]
The tags (or virtual desktops or workspaces). This contains  an entry '+++index+++' for each tag with the given '+++index+++'.


     * '[datatype]#uint#' *+[entryname]#count#+*

     * *+[entryname]#by-name#+*: For attributes and children, see <<doc_cls_byname,+monitors.by-name+>>

     * *+[entryname]#focus#+*: the object of the focused tag, equivalently, the tag on the focused monitor. [[doc_cls_hstag]]

       ** '[datatype]#bool#' *+[entryname]#at_end#+* [defaultvalue]#= false#: all tags with this property activated will be kept at the end of the tag list. Usually, this property is set for special purpose tags like scratchpads.

       ** '[datatype]#int#' *+[entryname]#client_count#+*: the number of clients on this tag

       ** '[datatype]#int#' *+[entryname]#curframe_wcount#+*: number of clients in the selected frame

       ** '[datatype]#int#' *+[entryname]#curframe_windex#+*: index of the focused client in the selected frame

       ** '[datatype]#bool#' *+[entryname]#floating#+* [defaultvalue]#= false#: if the entire tag is set to floating mode

       ** '[datatype]#bool#' *+[entryname]#floating_focused#+* [defaultvalue]#= false#: if the floating layer is focused (otherwise the tiling layer is)

       ** '[datatype]#int#' *+[entryname]#frame_count#+*: the number of frames on this tag

       ** '[datatype]#uint#' *+[entryname]#index#+* [defaultvalue]#= 0#: index of this tag (the first index is 0)

       ** '[datatype]#string#' *+[entryname]#name#+* [defaultvalue]#= name_#: name of the tag (must be non-empty)

       ** '[datatype]#int#' *+[entryname]#urgent_count#+*: the number of urgent clients on this tag

       ** '[datatype]#bool#' *+[entryname]#visible#+* [defaultvalue]#= false#: if this tag is shown on some monitor

       ** *+[entryname]#focused_client#+*: For attributes and children, see <<doc_cls_client,+clients.focus+>>

       ** *+[entryname]#tiling#+*: [[doc_cls_frametree]]

         *** *+[entryname]#focused_frame#+*: The focused frame (leaf) in this frame tree. For attributes and children, see <<doc_cls_frameleaf,+tags.focus.tiling.root+>>
         *** *+[entryname]#root#+* can be a  frame leaf.  [[doc_cls_frameleaf]]

           **** '[datatype]#LayoutAlgorithm#' *+[entryname]#algorithm#+*

           **** '[datatype]#int#' *+[entryname]#client_count#+*

           **** '[datatype]#Rectangle#' *+[entryname]#content_geometry#+*: the geometry of the frame's contents, i.e. of the area filled by child frames or client windows.

           **** '[datatype]#string#' *+[entryname]#index#+*: A string containing only '+++0+++' and '+++1+++' that describes the position of the frame in the tree. The empty string denotes the root frame. Appending '+++0+++' (respectively '+++1+++') to a frame index yields the frame index of the first (respectively second) subtree.

           **** '[datatype]#int#' *+[entryname]#selection#+*
         *** *+[entryname]#root#+* can be a  frame split.  [[doc_cls_framesplit]]

           **** '[datatype]#Rectangle#' *+[entryname]#content_geometry#+*: the geometry of the frame's contents, i.e. of the area filled by child frames or client windows.

           **** '[datatype]#decimal#' *+[entryname]#fraction#+*

           **** '[datatype]#string#' *+[entryname]#index#+*: A string containing only '+++0+++' and '+++1+++' that describes the position of the frame in the tree. The empty string denotes the root frame. Appending '+++0+++' (respectively '+++1+++') to a frame index yields the frame index of the first (respectively second) subtree.

           **** '[datatype]#int#' *+[entryname]#selection#+*

           **** '[datatype]#SplitAlign#' *+[entryname]#split_type#+*
           **** *+[entryname]#0#+* can be a  frame leaf.  For attributes and children, see <<doc_cls_frameleaf,+tags.focus.tiling.root+>>
           **** *+[entryname]#0#+* can be a  frame split.  For attributes and children, see <<doc_cls_framesplit,+tags.focus.tiling.root+>>
           **** *+[entryname]#1#+* can be a  frame leaf.  For attributes and children, see <<doc_cls_frameleaf,+tags.focus.tiling.root+>>
           **** *+[entryname]#1#+* can be a  frame split.  For attributes and children, see <<doc_cls_framesplit,+tags.focus.tiling.root+>>


=== theme: [[doc_cls_theme]]
----
inner_color/inner_width
      ╻        outer_color/outer_width
      │                  ╻
      │                  │
┌────╴│╶─────────────────┷─────┐ ⎫ border_width
│     │      color             │ ⎬ + title_height + title_depth
│  ┌──┷─────────────────────┐  │ ⎭ + padding_top
│  │====================....│  │
│  │== window content ==....│  │
│  │====================..╾──────── background_color
│  │........................│  │
│  └────────────────────────┘  │ ⎱ border_width +
└──────────────────────────────┘ ⎰ padding_bottom
----
Setting an attribute of the theme object just propagates the value to the respective attribute of the +tiling+ and the +floating+ object.
If the title area is divided into tabs, then the not selected tabs can be styled using the +tab_...+ attributes. If these attributes are empty, then the colors are taken from the theme of the client to which the tab refers to.


     * '[datatype]#color#' *+[entryname]#background_color#+* [defaultvalue]#= black#: color behind window contents visible on resize

     * '[datatype]#uint#' *+[entryname]#border_width#+* [defaultvalue]#= 0#: the base width of the border

     * '[datatype]#color#' *+[entryname]#color#+* [defaultvalue]#= black#: the basic background color of the border

     * '[datatype]#color#' *+[entryname]#inner_color#+* [defaultvalue]#= black#: color of the inner border

     * '[datatype]#uint#' *+[entryname]#inner_width#+* [defaultvalue]#= 0#: width of the border around the clients content

     * '[datatype]#CssFile::Ptr#' *+[entryname]#name#+*: the absolute path to a css theme file. if this is empty, then the theme is specified by the attributes.

     * '[datatype]#color#' *+[entryname]#outer_color#+* [defaultvalue]#= black#: color of the outer border

     * '[datatype]#uint#' *+[entryname]#outer_width#+* [defaultvalue]#= 0#: width of an border close to the edge

     * '[datatype]#uint#' *+[entryname]#padding_bottom#+* [defaultvalue]#= 0#: additional border width on the bottom

     * '[datatype]#uint#' *+[entryname]#padding_left#+* [defaultvalue]#= 0#: additional border width on the left

     * '[datatype]#uint#' *+[entryname]#padding_right#+* [defaultvalue]#= 0#: additional border width on the right

     * '[datatype]#uint#' *+[entryname]#padding_top#+* [defaultvalue]#= 0#: additional border width on the top

     * '[datatype]#string#' *+[entryname]#reset#+*: writing this resets all attributes to a default value

     * '[datatype]#CssSource#' *+[entryname]#style_override#+*: additional css source to overwrite parts of the theme. All rules here have higher precedence than all rules in the theme

     * '[datatype]#MaybeColor#' *+[entryname]#tab_color#+* [defaultvalue]#= Inherit#: if non-empty, the color of non-urgent and unfocused tabs

     * '[datatype]#MaybeColor#' *+[entryname]#tab_outer_color#+* [defaultvalue]#= Inherit#: if non-empty, the outer border color of non-urgent and unfocused tabs; if empty, the colors are taken from the tab'sclient decoration settings.

     * '[datatype]#MaybeULong#' *+[entryname]#tab_outer_width#+* [defaultvalue]#= Inherit#: if non-empty, the outer border width of non-urgent and unfocused tabs

     * '[datatype]#MaybeColor#' *+[entryname]#tab_title_color#+* [defaultvalue]#= Inherit#: if non-empty, the title color of non-urgent and unfocused tabs

     * '[datatype]#bool#' *+[entryname]#tight_decoration#+* [defaultvalue]#= false#: specifies whether the size hints also affect the window decoration or only the window contents of tiled clients (requires enabled sizehints_tiling)

     * '[datatype]#TextAlign#' *+[entryname]#title_align#+* [defaultvalue]#= left#: the horizontal alignment of the title within the tab or title bar. The value is one of: left, center, right

     * '[datatype]#color#' *+[entryname]#title_color#+* [defaultvalue]#= black#

     * '[datatype]#MaybeInt#' *+[entryname]#title_depth#+* [defaultvalue]#= 0#: the space below the baseline of the window title, or '' for an automatic calculation based on the font.

     * '[datatype]#font#' *+[entryname]#title_font#+* [defaultvalue]#= fixed#

     * '[datatype]#MaybeULong#' *+[entryname]#title_height#+* [defaultvalue]#= 0#: the space above the baseline of the window title, or '' for an automatic calculation based on the font.

     * '[datatype]#TitleWhen#' *+[entryname]#title_when#+* [defaultvalue]#= always#: when to show the window title: always, never, if the the client is in a tabbed scenario like a max frame (+one_tab+), if there are +multiple_tabs+ to be shown.

     * *+[entryname]#active#+*: configures the decoration of the focused client. [[doc_cls_decorationscheme]]

       ** '[datatype]#color#' *+[entryname]#background_color#+* [defaultvalue]#= black#: color behind window contents visible on resize

       ** '[datatype]#uint#' *+[entryname]#border_width#+* [defaultvalue]#= 0#: the base width of the border

       ** '[datatype]#color#' *+[entryname]#color#+* [defaultvalue]#= black#: the basic background color of the border

       ** '[datatype]#color#' *+[entryname]#inner_color#+* [defaultvalue]#= black#: color of the inner border

       ** '[datatype]#uint#' *+[entryname]#inner_width#+* [defaultvalue]#= 0#: width of the border around the clients content

       ** '[datatype]#color#' *+[entryname]#outer_color#+* [defaultvalue]#= black#: color of the outer border

       ** '[datatype]#uint#' *+[entryname]#outer_width#+* [defaultvalue]#= 0#: width of an border close to the edge

       ** '[datatype]#uint#' *+[entryname]#padding_bottom#+* [defaultvalue]#= 0#: additional border width on the bottom

       ** '[datatype]#uint#' *+[entryname]#padding_left#+* [defaultvalue]#= 0#: additional border width on the left

       ** '[datatype]#uint#' *+[entryname]#padding_right#+* [defaultvalue]#= 0#: additional border width on the right

       ** '[datatype]#uint#' *+[entryname]#padding_top#+* [defaultvalue]#= 0#: additional border width on the top

       ** '[datatype]#string#' *+[entryname]#reset#+*: writing this resets all attributes to a default value

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_color#+* [defaultvalue]#= Inherit#: if non-empty, the color of non-urgent and unfocused tabs

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_outer_color#+* [defaultvalue]#= Inherit#: if non-empty, the outer border color of non-urgent and unfocused tabs; if empty, the colors are taken from the tab'sclient decoration settings.

       ** '[datatype]#MaybeULong#' *+[entryname]#tab_outer_width#+* [defaultvalue]#= Inherit#: if non-empty, the outer border width of non-urgent and unfocused tabs

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_title_color#+* [defaultvalue]#= Inherit#: if non-empty, the title color of non-urgent and unfocused tabs

       ** '[datatype]#bool#' *+[entryname]#tight_decoration#+* [defaultvalue]#= false#: specifies whether the size hints also affect the window decoration or only the window contents of tiled clients (requires enabled sizehints_tiling)

       ** '[datatype]#TextAlign#' *+[entryname]#title_align#+* [defaultvalue]#= left#: the horizontal alignment of the title within the tab or title bar. The value is one of: left, center, right

       ** '[datatype]#color#' *+[entryname]#title_color#+* [defaultvalue]#= black#

       ** '[datatype]#MaybeInt#' *+[entryname]#title_depth#+* [defaultvalue]#= 0#: the space below the baseline of the window title, or '' for an automatic calculation based on the font.

       ** '[datatype]#font#' *+[entryname]#title_font#+* [defaultvalue]#= fixed#

       ** '[datatype]#MaybeULong#' *+[entryname]#title_height#+* [defaultvalue]#= 0#: the space above the baseline of the window title, or '' for an automatic calculation based on the font.

       ** '[datatype]#TitleWhen#' *+[entryname]#title_when#+* [defaultvalue]#= always#: when to show the window title: always, never, if the the client is in a tabbed scenario like a max frame (+one_tab+), if there are +multiple_tabs+ to be shown.

     * *+[entryname]#floating#+*: behaves analogously to +tiling+. [[doc_cls_dectriple]]

       ** '[datatype]#color#' *+[entryname]#background_color#+* [defaultvalue]#= black#: color behind window contents visible on resize

       ** '[datatype]#uint#' *+[entryname]#border_width#+* [defaultvalue]#= 0#: the base width of the border

       ** '[datatype]#color#' *+[entryname]#color#+* [defaultvalue]#= black#: the basic background color of the border

       ** '[datatype]#color#' *+[entryname]#inner_color#+* [defaultvalue]#= black#: color of the inner border

       ** '[datatype]#uint#' *+[entryname]#inner_width#+* [defaultvalue]#= 0#: width of the border around the clients content

       ** '[datatype]#color#' *+[entryname]#outer_color#+* [defaultvalue]#= black#: color of the outer border

       ** '[datatype]#uint#' *+[entryname]#outer_width#+* [defaultvalue]#= 0#: width of an border close to the edge

       ** '[datatype]#uint#' *+[entryname]#padding_bottom#+* [defaultvalue]#= 0#: additional border width on the bottom

       ** '[datatype]#uint#' *+[entryname]#padding_left#+* [defaultvalue]#= 0#: additional border width on the left

       ** '[datatype]#uint#' *+[entryname]#padding_right#+* [defaultvalue]#= 0#: additional border width on the right

       ** '[datatype]#uint#' *+[entryname]#padding_top#+* [defaultvalue]#= 0#: additional border width on the top

       ** '[datatype]#string#' *+[entryname]#reset#+*: writing this resets all attributes to a default value

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_color#+* [defaultvalue]#= Inherit#: if non-empty, the color of non-urgent and unfocused tabs

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_outer_color#+* [defaultvalue]#= Inherit#: if non-empty, the outer border color of non-urgent and unfocused tabs; if empty, the colors are taken from the tab'sclient decoration settings.

       ** '[datatype]#MaybeULong#' *+[entryname]#tab_outer_width#+* [defaultvalue]#= Inherit#: if non-empty, the outer border width of non-urgent and unfocused tabs

       ** '[datatype]#MaybeColor#' *+[entryname]#tab_title_color#+* [defaultvalue]#= Inherit#: if non-empty, the title color of non-urgent and unfocused tabs

       ** '[datatype]#bool#' *+[entryname]#tight_decoration#+* [defaultvalue]#= false#: specifies whether the size hints also affect the window decoration or only the window contents of tiled clients (requires enabled sizehints_tiling)

       ** '[datatype]#TextAlign#' *+[entryname]#title_align#+* [defaultvalue]#= left#: the horizontal alignment of the title within the tab or title bar. The value is one of: left, center, right

       ** '[datatype]#color#' *+[entryname]#title_color#+* [defaultvalue]#= black#

       ** '[datatype]#MaybeInt#' *+[entryname]#title_depth#+* [defaultvalue]#= 0#: the space below the baseline of the window title, or '' for an automatic calculation based on the font.

       ** '[datatype]#font#' *+[entryname]#title_font#+* [defaultvalue]#= fixed#

       ** '[datatype]#MaybeULong#' *+[entryname]#title_height#+* [defaultvalue]#= 0#: the space above the baseline of the window title, or '' for an automatic calculation based on the font.

       ** '[datatype]#TitleWhen#' *+[entryname]#title_when#+* [defaultvalue]#= always#: when to show the window title: always, never, if the the client is in a tabbed scenario like a max frame (+one_tab+), if there are +multiple_tabs+ to be shown.

       ** *+[entryname]#active#+*: configures the decoration of the focused client. For attributes and children, see <<doc_cls_decorationscheme,+theme.active+>>

       ** *+[entryname]#normal#+*: the default decoration scheme for clients. For attributes and children, see <<doc_cls_decorationscheme,+theme.active+>>

       ** *+[entryname]#urgent#+*: configures the decoration of urgent clients. For attributes and children, see <<doc_cls_decorationscheme,+theme.active+>>

     * *+[entryname]#fullscreen#+*: configures clients in fullscreen state. For attributes and children, see <<doc_cls_dectriple,+theme.floating+>>

     * *+[entryname]#minimal#+*: configures clients with minimal decorations triggered by +smart_window_surroundings+. For attributes and children, see <<doc_cls_dectriple,+theme.floating+>>

     * *+[entryname]#normal#+*: the default decoration scheme for clients. For attributes and children, see <<doc_cls_decorationscheme,+theme.active+>>

     * *+[entryname]#tiling#+*: configures the decoration of tiled clients, setting one of its attributes propagates the respective attribute of the +active+, +normal+ and +urgent+ child objects. For attributes and children, see <<doc_cls_dectriple,+theme.floating+>>

     * *+[entryname]#urgent#+*: configures the decoration of urgent clients. For attributes and children, see <<doc_cls_decorationscheme,+theme.active+>>


=== types: [[doc_cls_typesdoc]]
This lists the types that are used for attributes and command arguments.


     * *+[entryname]#bool#+*: Type representing boolean values, i.e. an '+++on+++' or '+++off+++' state, with aliases '+++true+++' and '+++false+++'. When writing to a boolean value, one can also specify '+++toggle+++' in order to alter its value. [[doc_cls_typedesc]]

       ** '[datatype]#string#' *+[entryname]#fullname#+*: the full and unique name of this type

       ** '[datatype]#string#' *+[entryname]#shortname#+*: A short (one-character long) name of this type which is used in the output of the '+++attr+++' command

     * *+[entryname]#color#+*: Type representing colors.
A color can be defined in one of the following formats:
1. #RRGGBB where R, G, B are hexidecimal digits (0-9, A-F),
   and RR, GG, BB represent the values for red, green, blue.
2. #RRGGBBAA represents a color with alpha-value AA.
   The alpha value 00 is fully transparent and FF is fully
   opaque/intransparent.
3. a common color name like '+++red+++', '+++blue,+++' '+++orange+++', etc. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#decimal#+*: Fixed precision decimal numbers, e.g. 0.34. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#font#+*: A font specification (font family with modifiers regarding size, weight, etc.) in one of the following formats: +
 +
- Fontconfig description. This supports antialiased fonts,
  for example:
  *** '+++Dejavu Sans:pixelsize=12+++'
  *** '+++Bitstream Vera Sans:size=12:bold+++' +
 +
- X logical font description (XLFD), as provided by the
  xfontsel tool. No antialiasing is supported here, but this
  is usually superior for bitmap fonts. For example:
  *** '+++-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*+++' for a standard 
    bitmap font available on most systems. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#int#+*: Type representing signed integers.
When overwriting an integer, you can increase or decrease its value relatively by writing '++++=N+++' or '+++-=N+++' where N is an integer. So for example, writing '++++=3+++' to an attribute increases its value by 3. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#names#+*: A fixed set of names, depending on the context, e.g. names of layout algorithms or the split type of a non-leaf frame (which is only '+++horizontal+++' or '+++vertical+++'). For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#rectangle#+*: A rectangle on the screen consisting of a size and the position on the screen. The format is WxH+X+Y where W is the width, H is the height, and X and Y are the coordinates of the top left corner of the rectangle: X is the number of pixels to the left screen edge and Y is the number of pixels to the top screen edge. (if X or Y is negative, then the + turns into -). For example: 800x600+800+0 or 400x200-10+30. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#regex#+*: A POSIX extended regular expression. Note that when passing a regex on the command line, additional quoting can be necessary. For explanations and examples, see section 9.4.6 of the documentation: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04_06. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#string#+*: Type representing normal text. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#uint#+*: Type representing unsigned (i.e. non-negative) integers.
When overwriting an integer, you can increase or decrease its value relatively by writing '++++=N+++' or '+++-=N+++' where N is an integer. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>

     * *+[entryname]#windowid#+*: The window id is the number of a window. This can be a managed window (i.e. client) or an unmanaged window (e.g. a panel, a menu, or a desktop window).
The default format is 0xHEX where HEX is a hexadecimal number (digits 0-9 and a-f) but it can also be specified in the decimal system (base 10), or as an octal number (with prefix 0 and base 8).
When a window id is printed, it is always printed in the 0xHEX format and without any leading zeroes. For attributes and children, see <<doc_cls_typedesc,+types.bool+>>


=== watchers: [[doc_cls_watchers]]


     * '[datatype]#uint#' *+[entryname]#count#+*: the number of attributes that are watched
