Window:
* cycle - no change
* direction - only consider matching nodes
* last - walk history
* focused - match or NULL
* biggest - find biggest matching
Desktop:
* cycle - no change
* focused - match or NULL
* last - match or NULL
Monitor:
* cycle - no change
* direction - only consider matching nodes
* last - match or NULL
* focused - match or NULL
The removal is motivated by the following example:
+-------+-------+
| | |
| | b |
| | |
| |_______|
| a | |
| * | c |
| | |
| |_______|
| | |
| | d |
| | |
+-------+-------+
Bellow is a summary of the number of steps required to reach *b*, *c* and *d* with *a* as a starting point with the associated mean and variance:
focus_by_distance steps mean variance
---------------------------------------------------------------
false 1, 2, 3 2 2/3
true 2, 1, 2 5/3 2/9
The new message syntax:
- Provides 10 commands instead of 60.
- Allows multiple actions to be applied in one call.
The client now returns an non zero exit code when a message fails.
The `is_adjacent` function now handles vacant nodes.
The fourth argument of `focus_node` was introduced to avoid calling
unneeded functions from `manage_window`: the reason is not good enough
to justify the existence of that extra argument.
The `birth_mode` was not sufficient for properly unrotate the brother of
a removed node. The `birth_rotation` stores the rotation applied to the
brother subtree when the node was inserted.
This should help to enforce that (L + n) - n = L in every possible
cases. Which means that adding a node and removing it should leave the
layout unchanged.
The aforementioned setting, when set, makes the focus movements based on
the distances between the window sides.
The `{prev,next}_leaf` functions were taught not to climb above their
roofs.
The `swap_nodes` function was not written to handle nodes from different
desktops. We need to be able to do that in order to move tiled windows
across monitors.