mirror of
https://github.com/vale981/bspwm
synced 2025-03-06 02:01:42 -05:00
75 lines
4.2 KiB
Markdown
75 lines
4.2 KiB
Markdown
.
|
|
|-. ,-. ,-. . , , ,-,-.
|
|
| | `-. | | |/|/ | | |
|
|
^-' `-' |-' ' ' ' ' '
|
|
|
|
|
'
|
|
|
|
# Description
|
|
|
|
- Windows are represented as the leaves of a binary tree.
|
|
- To each leaf corresponds exactly one window.
|
|
- The only nodes which can be focused are the leaves.
|
|
- The leaves are called *window nodes*.
|
|
- The other nodes are called *container nodes*.
|
|
- Only two methods of node insertion will be provided: *replace* and *pair*.
|
|
|
|
Example: insertion of a new node (number 4) into the given tree with the
|
|
*replace* method:
|
|
|
|
b c
|
|
/ \ / \
|
|
3 a --> 4 b
|
|
^ / \ ^ / \
|
|
2 1 3 a
|
|
/ \
|
|
2 1
|
|
+-------------------------+ +-------------------------+
|
|
| | | | | |
|
|
| | 2 | | | 3 |
|
|
| | | | | |
|
|
| 3 |------------| --> | 4 |------------|
|
|
| ^ | | | ^ | | |
|
|
| | 1 | | | 2 | 1 |
|
|
| | | | | | |
|
|
+-------------------------+ +-------------------------+
|
|
|
|
And with the *pair* method:
|
|
|
|
b b
|
|
/ \ / \
|
|
3 a --> c a
|
|
^ / \ / \ / \
|
|
2 1 4 3 2 1
|
|
^
|
|
+-------------------------+ +-------------------------+
|
|
| | | | | |
|
|
| | 2 | | 4 | 2 |
|
|
| | | | ^ | |
|
|
| 3 |------------| --> |------------|------------|
|
|
| ^ | | | | |
|
|
| | 1 | | 3 | 1 |
|
|
| | | | | |
|
|
+-------------------------+ +-------------------------+
|
|
|
|
- Each container node is a split rectangle.
|
|
- The splitting method of a container node is either *automatic* or *manual*.
|
|
- In the *automatic* splitting mode, the split type is vertical if the width of
|
|
the rectangle of the node is greater that its height and horizontal
|
|
otherwise.
|
|
- Several tree transformations will be provided: directional leaf swap, node
|
|
pulling, rotation, contraction, dilatation...
|
|
|
|
# Planned Features
|
|
|
|
- Directional focus movement.
|
|
- Float individual windows (it means there will be a floating layer).
|
|
- Resize and move floating windows with the keyboard.
|
|
- Resize and move floating windows on a regular magnetic grid (the granularity of the grid might be related to GCD(screen\_width, screen\_height)).
|
|
- Double window borders. Rationale: with single borders, it might happen that the color of the window border is too close to the color of the window content to be visible.
|
|
- For floating windows, double borders will not be enough to always see the external borders: in order to solve the problem a custom X window property will be set, and a patch for `compton` will be provided (the third border will be the generated shadow).
|
|
- Directional *pair* splitting preselection (feedback in the window border).
|
|
- Don't automatically give the focus to toolbar windows.
|
|
- When a fullscreen window looses the focus, its fullscreen state will be set to *false* if the window to be focused is in the same desktop.
|
|
- Change settings and call methods at runtime (fifo).
|
|
- Configuration file in Lua.
|