]> git.lizzy.rs Git - bspwm.git/blob - README.mkd
Fix code blocks
[bspwm.git] / README.mkd
1     .                       
2     |-. ,-. ,-. . , , ,-,-. 
3     | | `-. | | |/|/  | | | 
4     ^-' `-' |-' ' '   ' ' ' 
5             |               
6             '               
7
8 # Description
9
10 - Windows are represented as the leaves of a binary tree.
11 - To each leaf corresponds exactly one window.
12 - The only nodes which can be focused are the leaves.
13 - The leaves are called *window nodes*.
14 - The other nodes are called *container nodes*.
15 - Only two methods of node insertion will be provided: *replace* and *pair*.
16
17         Example: insertion of a new node (number 4) into the given tree with the
18         *replace* method:
19
20                      b                                   c
21                     / \                                 / \
22                    3   a              -->              4   b
23                    ^  / \                              ^  / \
24                      2   1                               3   a
25                                                             / \
26                                                            2   1
27         +-------------------------+         +-------------------------+
28         |            |            |         |            |            |
29         |            |     2      |         |            |     3      |
30         |            |            |         |            |            |
31         |     3      |------------|   -->   |     4      |------------|
32         |     ^      |            |         |     ^      |     |      |
33         |            |     1      |         |            |  2  |  1   |
34         |            |            |         |            |     |      |
35         +-------------------------+         +-------------------------+
36
37         And with the *pair* method:
38
39                      b                                   b
40                     / \                                 / \
41                    3   a              -->              c   a
42                    ^  / \                             / \ / \
43                      2   1                           4  3 2  1
44                                                      ^
45         +-------------------------+         +-------------------------+
46         |            |            |         |            |            |
47         |            |     2      |         |     4      |     2      |
48         |            |            |         |     ^      |            |
49         |     3      |------------|   -->   |------------|------------|
50         |     ^      |            |         |            |            |
51         |            |     1      |         |     3      |     1      |
52         |            |            |         |            |            |
53         +-------------------------+         +-------------------------+
54
55 - Each container node is a split rectangle.
56 - The splitting method of a container node is either *automatic* or *manual*.
57 - In the *automatic* splitting mode, the split type is vertical if the width of
58   the rectangle of the node is greater that its height and horizontal
59   otherwise.
60 - Several tree transformations will be provided: directional leaf swap, node
61   pulling, rotation, contraction, dilatation...
62
63 # Planned Features
64
65 - Directional focus movement (left, right, up, down).
66 - Tree transformations: swap the children of a container node, rotate the tree, expand (or contract): map x -> x^2 (or x -> x^½) to the node's split ratio.
67 - Move the focused node up in the tree (decrease its depth).
68 - Float individual windows (it means there will be a floating layer).
69 - Resize and move floating windows with the keyboard.
70 - Resize and move floating windows on a regular magnetic grid (the granularity of the grid might be related to GCD(screen\_width, screen\_height)).
71 - 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.
72 - 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).
73 - Change settings at runtime (fifo).
74 - Don't automatically give the focus to toolbar windows.
75 - 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.