Select a node.
----
-NODE_SEL := [NODE_SEL#](DIR|CYCLE_DIR|PATH|any|last|newest|
- older|newer|focused|pointed|
- biggest|<node_id>)[.[!]focused][.[!]automatic][.[!]local][.[!]active]
- [.[!]leaf][.[!]window][.[!]STATE][.[!]FLAG][.[!]LAYER]
- [.[!]same_class][.[!]descendant_of][.[!]ancestor_of]
+NODE_SEL := [NODE_SEL#](DIR|CYCLE_DIR|PATH|any|first_ancestor|last|newest|
+ older|newer|focused|pointed|biggest|smallest|
+ <node_id>)[.[!]focused][.[!]active][.[!]automatic][.[!]local]
+ [.[!]leaf][.[!]window][.[!]STATE][.[!]FLAG][.[!]LAYER][.[!]SPLIT_TYPE]
+ [.[!]same_class][.[!]descendant_of][.[!]ancestor_of]
STATE := tiled|pseudo_tiled|floating|fullscreen
LAYER := below|normal|above
+SPLIT_TYPE := horizontal|vertical
+
PATH := @[DESKTOP_SEL:][[/]JUMP](/JUMP)*
JUMP := first|1|second|2|brother|parent|DIR
Selects the window in the given (spacial) direction relative to the reference node.
'CYCLE_DIR'::
- Selects the window in the given (cyclic) direction relative to the reference node.
+ Selects the node in the given (cyclic) direction relative to the reference node within a depth-first in-order traversal of the tree.
'PATH'::
Selects the node at the given path.
any::
Selects the first node that matches the given selectors.
+first_ancestor::
+ Selects the first ancestor of the reference node that matches the given selectors.
+
last::
Selects the previously focused node relative to the reference node.
Selects the currently focused node.
pointed::
- Selects the window under the pointer.
+ Selects the leaf under the pointer.
biggest::
- Selects the biggest window.
+ Selects the biggest leaf.
+
+smallest::
+ Selects the smallest leaf.
<node_id>::
Selects the node with the given ID.
^^^^^^^^^
[!]focused::
- Only consider focused or unfocused nodes.
+ Only consider the focused node.
+
+[!]active::
+ Only consider nodes that are the focused node of their desktop.
[!]automatic::
- Only consider nodes in automatic or manual insertion mode. See also *--presel-dir* under *Node* in the *DOMAINS* section below.
+ Only consider nodes in automatic insertion mode. See also *--presel-dir* under *Node* in the *DOMAINS* section below.
[!]local::
- Only consider nodes in or not in the reference desktop.
-
-[!]active::
- Only consider nodes in or not in the active desktop of their monitor.
+ Only consider nodes in the reference desktop.
[!]leaf::
- Only consider leaves or internal nodes.
+ Only consider leaf nodes.
[!]window::
- Only consider nodes that hold or don't hold a window.
+ Only consider nodes that hold a window.
[!](tiled|pseudo_tiled|floating|fullscreen)::
- Only consider windows in or not in the given state.
+ Only consider windows in the given state.
[!]same_class::
- Only consider windows that have or don't have the same class as the reference window.
+ Only consider windows that have the same class as the reference window.
[!]descendant_of::
- Only consider nodes that are or aren't descendants of the reference node.
+ Only consider nodes that are descendants of the reference node.
[!]ancestor_of::
- Only consider nodes that are or aren't ancestors of the reference node.
+ Only consider nodes that are ancestors of the reference node.
[!](hidden|sticky|private|locked|marked|urgent)::
- Only consider windows that have or don't have the given flag set.
+ Only consider windows that have the given flag set.
[!](below|normal|above)::
- Only consider windows in or not in the given layer.
+ Only consider windows in the given layer.
+
+[!](horizontal|vertical)::
+ Only consider nodes with the given split type.
+
Desktop
~~~~~~~
----
DESKTOP_SEL := [DESKTOP_SEL#](CYCLE_DIR|any|last|newest|older|newer|
[MONITOR_SEL:](focused|^<n>)|
- <desktop_id>|<desktop_name>)[.[!]occupied][.[!]focused][.[!]urgent][.[!]local]
+ <desktop_id>|<desktop_name>)[.[!]focused][.[!]active]
+ [.[!]occupied][.[!]urgent][.[!]local]
+ [.[!]LAYOUT][.[!]user_LAYOUT]
+
+LAYOUT := tiled|monocle
----
Descriptors
Modifiers
^^^^^^^^^
-[!]occupied::
- Only consider occupied or free desktops.
-
[!]focused::
- Only consider focused or unfocused desktops.
+ Only consider the focused desktop.
+
+[!]active::
+ Only consider desktops that are the focused desktop of their monitor.
+
+[!]occupied::
+ Only consider occupied desktops.
[!]urgent::
- Only consider urgent or non urgent desktops.
+ Only consider urgent desktops.
[!]local::
- Only consider desktops inside or outside of the reference monitor.
+ Only consider desktops inside the reference monitor.
+
+[!](tiled|monocle)::
+ Only consider desktops with the given layout.
+
+[!](user_tiled|user_monocle)::
+ Only consider desktops which have the given layout as userLayout.
Monitor
~~~~~~~
----
MONITOR_SEL := [MONITOR_SEL#](DIR|CYCLE_DIR|any|last|newest|older|newer|
focused|pointed|primary|^<n>|
- <monitor_id>|<monitor_name>)[.[!]occupied][.[!]focused]
+ <monitor_id>|<monitor_name>)[.[!]focused][.[!]occupied]
----
Descriptors
Modifiers
^^^^^^^^^
+[!]focused::
+ Only consider the focused monitor.
+
[!]occupied::
- Only consider monitors where the focused desktop is occupied or free.
+ Only consider monitors where the focused desktop is occupied.
-[!]focused::
- Only consider focused or unfocused monitors.
Window States
-------------
tiled::
- Its size and position are determined by the splitting type and ratio of each node of its path in the window tree.
+ Its size and position are determined by the window tree.
pseudo_tiled::
- Has an unrestricted size while being centered in its tiling space.
+ A tiled window that automatically shrinks but doesn't stretch beyond its floating size.
floating::
- Can be moved/resized freely. Although it doesn't occupy any tiling space, it is still part of the window tree.
+ Can be moved/resized freely. Although it doesn't use any tiling space, it is still part of the window tree.
fullscreen::
- Fills its monitor rectangle and has no borders. It is send in the ABOVE layer by default.
+ Fills its monitor rectangle and has no borders.
Node Flags
Ignores the *node --close* message.
marked::
- Is marked (useful for deferred operations).
+ Is marked (useful for deferred actions). A marked node becomes unmarked after being sent on a preselected node.
urgent::
Has its urgency hint set. This flag is set externally.
There's three stacking layers: BELOW, NORMAL and ABOVE.
-In each layer, the window are orderered as follow: tiled & pseudo-tiled < fullscreen < floating.
+In each layer, the window are orderered as follow: tiled & pseudo-tiled < floating < fullscreen.
Receptacles
-----------
-A leaf node that doesn't hold any window is called a receptacle. When a node is inserted on a receptacle in automatic mode, it will replace the receptacle. A receptacle can be inserted on a node and preselected. Receptacles can therefore be used to build a tree whose leaves are receptacles. Using the appropriate rules, one can then send windows on the leaves of this tree. This feature is used in 'examples/receptacles' to store and recreate layouts.
+A leaf node that doesn't hold any window is called a receptacle. When a node is inserted on a receptacle in automatic mode, it will replace the receptacle. A receptacle can be inserted on a node, preselected and killed. Receptacles can therefore be used to build a tree whose leaves are receptacles. Using the appropriate rules, one can then send windows on the leaves of this tree. This feature is used in 'examples/receptacles' to store and recreate layouts.
Domains
Rotate the tree rooted at the selected node.
*-F*, *--flip* 'horizontal|vertical'::
- Flip the the tree rooted at selected node.
+ Flip the tree rooted at selected node.
*-E*, *--equalize*::
Reset the split ratios of the tree rooted at the selected node to their default value.
*-C*, *--circulate* forward|backward::
Circulate the windows of the tree rooted at the selected node.
-*-t*, *--state* [~](tiled|pseudo_tiled|floating|fullscreen)::
- Set the state of the selected window. If *~* is present and the current state matches the given state, then the argument is interpreted as the last state.
+*-t*, *--state* \~|\[~]'STATE'::
+ Set the state of the selected window. If *\~* is present and the current state matches 'STATE', then the argument is interpreted as its last state. If the argument is just *~* with 'STATE' omitted, then the state of the selected window is set to its last state.
*-g*, *--flag* hidden|sticky|private|locked|marked[=on|off]::
Set or toggle the given flag for the selected node.
Options
^^^^^^^
-*-m*,*--monitor* ['MONITOR_SEL']::
-*-d*,*--desktop* ['DESKTOP_SEL']::
-*-n*, *--node* ['NODE_SEL']::
- Constrain matches to the selected monitor, desktop or node. The descriptor can be omitted for '-M', '-D' and '-N'.
+*-m*,*--monitor* ['MONITOR_SEL'|'MONITOR_MODIFIERS']::
+*-d*,*--desktop* ['DESKTOP_SEL'|'DESKTOP_MODIFIERS']::
+*-n*, *--node* ['NODE_SEL'|'NODE_MODIFIERS']::
+ Constrain matches to the selected monitors, desktops or nodes.
*--names*::
Print names instead of IDs. Can only be used with '-M' and '-D'.
Dump the current world state on standard output.
*-l*, *--load-state* <file_path>::
- Load a world state from the given file.
+ Load a world state from the given file. The path must be absolute.
*-a*, *--add-monitor* <name> WxH+X+Y::
Add a monitor for the given name and rectangle.
*-g*, *--get-status*::
Print the current status information.
+*-r*, *--restart*::
+ Restart the window manager
+
Rule
~~~~
Commands
^^^^^^^^
-*-a*, *--add* (<class_name>|\*)[:(<instance_name>|\*)] [*-o*|*--one-shot*] [monitor=MONITOR_SEL|desktop=DESKTOP_SEL|node=NODE_SEL] [state=STATE] [layer=LAYER] [split_dir=DIR] [split_ratio=RATIO] [(hidden|sticky|private|locked|marked|center|follow|manage|focus|border)=(on|off)] [rectangle=WxH+X+Y]::
+*-a*, *--add* (<class_name>|\*)[:(<instance_name>|\*)[:(<name>|\*)]] [*-o*|*--one-shot*] [monitor=MONITOR_SEL|desktop=DESKTOP_SEL|node=NODE_SEL] [state=STATE] [layer=LAYER] [split_dir=DIR] [split_ratio=RATIO] [(hidden|sticky|private|locked|marked|center|follow|manage|focus|border)=(on|off)] [rectangle=WxH+X+Y]::
Create a new rule.
-*-r*, *--remove* ^<n>|head|tail|(<class_name>|\*)[:(<instance_name>|*)]...::
+*-r*, *--remove* ^<n>|head|tail|(<class_name>|\*)[:(<instance_name>|\*)[:(<name>|*)]]...::
Remove the given rules.
*-l*, *--list*::
Prefix prepended to each of the status lines.
'external_rules_command'::
- External command used to retrieve rule consequences. The command will receive the following arguments: window ID, class name, instance name, and intermediate consequences. The output of that command must have the following format: *key1=value1 key2=value2 ...* (the valid key/value pairs are given in the description of the 'rule' command).
+ Absolute path to the command used to retrieve rule consequences. The command will receive the following arguments: window ID, class name, instance name, and intermediate consequences. The output of that command must have the following format: *key1=value1 key2=value2 ...* (the valid key/value pairs are given in the description of the 'rule' command).
+
+'automatic_scheme'::
+ The insertion scheme used when the insertion point is in automatic mode. Accept the following values: *longest_side*, *alternate*, *spiral*.
'initial_polarity'::
On which child should a new window be attached when adding a window on a single window tree in automatic mode. Accept the following values: *first_child*, *second_child*.
'directional_focus_tightness'::
The tightness of the algorithm used to decide whether a window is on the 'DIR' side of another window. Accept the following values: *high*, *low*.
+'removal_adjustment'::
+ Adjust the brother when unlinking a node from the tree in accordance with the automatic insertion scheme.
+
+'presel_feedback'::
+ Draw the preselection feedback area. Defaults to 'true'.
+
'borderless_monocle'::
Remove borders of tiled windows for the *monocle* desktop layout.
'gapless_monocle'::
Remove gaps of tiled windows for the *monocle* desktop layout.
-'paddingless_monocle'::
- Remove padding space for the *monocle* desktop layout.
+'top_monocle_padding'::
+'right_monocle_padding'::
+'bottom_monocle_padding'::
+'left_monocle_padding'::
+ Padding space added at the sides of the screen for the *monocle* desktop layout.
'single_monocle'::
Set the desktop layout to *monocle* if there's only one tiled window in the tree.
+'borderless_singleton'::
+ Remove borders of the only window on the only monitor regardless its layout.
+
'pointer_motion_interval'::
The minimum interval, in milliseconds, between two motion notify events.
Action performed when pressing 'pointer_modifier' + 'button<n>'. Accept the following values: *move*, *resize_side*, *resize_corner*, *focus*, *none*.
'click_to_focus'::
- Button used for focusing a window (or a monitor). The possible values are: *button1*, *button2*, *button3*, *any*, *none*.
+ Button used for focusing a window (or a monitor). The possible values are: *button1*, *button2*, *button3*, *any*, *none*. Defaults to *button1*.
'swallow_first_click'::
Don't replay the click that makes a window focused if 'click_to_focus' isn't *none*.
'ignore_ewmh_focus'::
Ignore EWMH focus requests coming from applications.
+'ignore_ewmh_fullscreen'::
+ Block the fullscreen state transitions that originate from an EWMH request. The possible values are: *none*, *all*, or a comma separated list of the following values: *enter*, *exit*.
+
+'ignore_ewmh_struts'::
+ Ignore strut hinting from clients requesting to reserve space (i.e. task bars).
+
'center_pseudo_tiled'::
Center pseudo tiled windows into their tiling rectangles. Defaults to 'true'.
The layer of a window changed.
'pointer_action <monitor_id> <desktop_id> <node_id> move|resize_corner|resize_side begin|end'::
- A pointer action occured.
+ A pointer action occurred.
Please note that *bspwm* initializes monitors before it reads messages on its socket, therefore the initial monitor events can't be received.
'T(T|P|F|=|@)'::
State of the focused node of a focused desktop.
-'G(S?P?L?)'::
+'G(S?P?L?M?)'::
Active flags of the focused node of a focused desktop.
Environment Variables