]> git.sur5r.net Git - i3/i3/blob - README.tree
add i3-config-wizard to .gitignore
[i3/i3] / README.tree
1 README file for the "tree" branch of i3
2 =======================================
3
4 This is a *massive* refactoring of i3. It was driven by thinking about whether
5 a different data structure could make things easier (for users and developers).
6 The old data structure of a table provided relatively flexible layouts but was
7 *very* hard to implement.
8
9 The new data structure is a tree. You can have horizontally and vertically split
10 containers. Each container can contain either nothing yet (waiting for a window
11 or for the user to put more containers in it), one or more containers or exactly
12 one window. RandR Outputs and workspaces are not treated specially, but they
13 are just containers inside the tree.
14
15 This structure allows for easy serialization, meaning multiple things:
16 - we can store and reload the layout for inplace restarts (this is already working)
17 - we can store parts of the layout and load them at any position in our tree
18   (partly working)
19   - we can load a layout specifying the physical positions of RandR outputs
20     for pathologic screen setups
21   - we can load a default layout for each workspace to specify the position
22     of dock clients
23 - we can use test-driven development to a much higher degree because we have
24   access to the whole tree
25
26 Ripping out the core data structures of i3 and replacing them of course has
27 some side-effects, which I will describe here (the list may not be complete,
28 new side-effects may not be known yet):
29 - Empty containers are allowed. They can swallow windows based on certain
30   criteria. We can implement session-saving this way.
31 - Assignments (put windows on certain workspaces, put workspaces on certain
32   outputs) are just special cases of the point above.
33 - Window decorations are now always rendered on the parent window. This means
34   we don’t have to carry around ugly Stack_Windows any more.
35 - Operations always (?) operate on containers, so you can make a container
36   (containing multiple windows) fullscreen or floating (for example) and no
37   longer just single windows.
38 - All X11 requests are now pushed to X11 in a separate step (rendering is one
39   step, updating X11 another). This makes talking to X11 a lot less error-prone
40   and allows for simpler code.
41
42 ======================
43 SOME WORDS OF WARNING:
44 ======================
45
46 The current state of the branch is not nearly the quality you know of i3. It
47 is in flux, changes and crashes are to be expected. Many features do not work
48 yet. It is only suitable if you want to help developing or have a look at what
49 is coming. Do *NOT* use it for production! You have been warned.