]> git.lizzy.rs Git - bspwm.git/blob - README.mkd
82a73b58e636b912302d0cca4fd8828bf5beab81
[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.
66 - Float individual windows (it means there will be a floating layer).
67 - Resize and move floating windows with the keyboard.
68 - Resize and move floating windows on a regular magnetic grid (the granularity of the grid might be related to GCD(screen\_width, screen\_height)).
69 - 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.
70 - 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).
71 - Directional *pair* splitting preselection (feedback in the window border).
72 - Don't automatically give the focus to toolbar windows.
73 - 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.
74 - Change settings and call methods at runtime.
75 - Configuration file in Lua.