This library encapsulates layout calculations from external dependencies and display servers, so that it can be used by window managers for X.Org, Wayland, or whatever else. It's all about splitting up rectangles, the library has no concept of "windows".
Some default layouts are provided, but custom layouts can be defined. Custom layout
definitions allow some flexibility but are still fairly limited by design, as the target
audience of this library are list-based / dynamic-tiling window managers (the likes of leftwm
, dwm
, ...) as opposed to manual tilers like i3
.
The following layouts are already provided by the library.
Those layouts have only a single stack and no main column.
Monocle
texts
+-----------+
| | only ever displays
| | one window at
| | maximum
+-----------+
EvenHorizontal
text
+--+--+--+--+
| | | | |
| | | | |
| | | | |
+--+--+--+--+
EvenVertical
text
+-----------+
|-----------|
|-----------|
|-----------|
+-----------+
Grid
text
+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---+
+-----+-----+ | +---+---+ +---+---+---+ +---+---| |
| | | | | | | | | | | | | +---+
| | | | | | | | | | | | | | |
+-----+-----+ +---+---+---+ +---+---+---+ +---+---+---+
4 windows 5 windows 6 windows 7 windows
Those layouts have a main and one stack column
MainAndDeck
text
+-------+-----+
| | | only ever displays
| | | two windows at
| | | maximum
+-------+-----+
main stack
MainAndVertStack
text
+-------+-----+
| | |
| +-----+
| | |
+-------+-----+
main stack
MainAndHorizontalStack
text
+-------+--+--+
| | | |
| | | |
| | | |
+-------+--+--+
main stack
RightMainAndVertStack
text
+-----+-------+
| | |
+-----+ |
| | |
+-----+-------+
stack main
Fibonacci
text
+-------+-----+
| | |
| +--+--+
| |--| |
+-------+--+--+
main stack
Dwindle
text
+-------+-----+
| | |
| +--+--+
| | |--|
+-------+--+--+
main stack
Those layouts have the main column in the center and two stack columns surrounding it.
CenterMain
```text +-----+-----------+-----+ | | | | | | +-----+ | | | | | | +-----+ | | | | +-----+-----------+-----+ 1st main 2nd stack stack
+-----------+-----------+ | | | | | | unoccupied | | | space is | | | taken over | | | +-----------+-----------+ 1st stack main
+-----------------------+ | | | | unoccupied | | space is | | taken over | | +-----------------------+ main ```
CenterMainBalanced
```text +-----+-----------+-----+ | | | | | | | | +-----+ +--+--+ | || | || | | | | | | +-----+-----------+--+--+ 1st main 2nd stack stack
+-----------+-----------+ | | | | | | unoccupied | | | space is | | | taken over | | | +-----------+-----------+ 1st stack main
+-----------------------+ | | | | unoccupied | | space is | | taken over | | +-----------------------+ main ```
CenterMainFluid
```text 1st 2nd stack main stack +-----+-----------+-----+ | | | | | | +-----+ | | | | | | +-----+ | | | | +-----+-----------+-----+ 1st main 2nd stack stack
+-----+-----------+-----+ | | |.....| | | |.....| unoccupied | | |.....| space is | | |.....| reserved | | |.....| +-----+-----------+-----+ 1st main stack
+-----+-----------+-----+ |.....| |.....| |.....| |.....| unoccupied |.....| |.....| space is |.....| |.....| reserved |.....| |.....| +-----+-----------+-----+ main ```
Note Requires Rust >= 1.56.0
shell
make
Note Running the demo requires you to have GTK (
gtk3
) and pango (?
) installed
shell
make dev