50 lines
2.5 KiB
Plaintext
50 lines
2.5 KiB
Plaintext
|
README file for the "tree" branch of i3
|
|||
|
=======================================
|
|||
|
|
|||
|
This is a *massive* refactoring of i3. It was driven by thinking about whether
|
|||
|
a different data structure could make things easier (for users and developers).
|
|||
|
The old data structure of a table provided relatively flexible layouts but was
|
|||
|
*very* hard to implement.
|
|||
|
|
|||
|
The new data structure is a tree. You can have horizontally and vertically split
|
|||
|
containers. Each container can contain either nothing yet (waiting for a window
|
|||
|
or for the user to put more containers in it), one or more containers or exactly
|
|||
|
one window. RandR Outputs and workspaces are not treated specially, but they
|
|||
|
are just containers inside the tree.
|
|||
|
|
|||
|
This structure allows for easy serialization, meaning multiple things:
|
|||
|
- we can store and reload the layout for inplace restarts (this is already working)
|
|||
|
- we can store parts of the layout and load them at any position in our tree
|
|||
|
(partly working)
|
|||
|
- we can load a layout specifying the physical positions of RandR outputs
|
|||
|
for pathologic screen setups
|
|||
|
- we can load a default layout for each workspace to specify the position
|
|||
|
of dock clients
|
|||
|
- we can use test-driven development to a much higher degree because we have
|
|||
|
access to the whole tree
|
|||
|
|
|||
|
Ripping out the core data structures of i3 and replacing them of course has
|
|||
|
some side-effects, which I will describe here (the list may not be complete,
|
|||
|
new side-effects may not be known yet):
|
|||
|
- Empty containers are allowed. They can swallow windows based on certain
|
|||
|
criteria. We can implement session-saving this way.
|
|||
|
- Assignments (put windows on certain workspaces, put workspaces on certain
|
|||
|
outputs) are just special cases of the point above.
|
|||
|
- Window decorations are now always rendered on the parent window. This means
|
|||
|
we don’t have to carry around ugly Stack_Windows any more.
|
|||
|
- Operations always (?) operate on containers, so you can make a container
|
|||
|
(containing multiple windows) fullscreen or floating (for example) and no
|
|||
|
longer just single windows.
|
|||
|
- All X11 requests are now pushed to X11 in a separate step (rendering is one
|
|||
|
step, updating X11 another). This makes talking to X11 a lot less error-prone
|
|||
|
and allows for simpler code.
|
|||
|
|
|||
|
======================
|
|||
|
SOME WORDS OF WARNING:
|
|||
|
======================
|
|||
|
|
|||
|
The current state of the branch is not nearly the quality you know of i3. It
|
|||
|
is in flux, changes and crashes are to be expected. Many features do not work
|
|||
|
yet. It is only suitable if you want to help developing or have a look at what
|
|||
|
is coming. Do *NOT* use it for production! You have been warned.
|