Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Monocle, Fullscreen, Floating, and Pseudo-Tiling as Tree Interpretations

bspwm supports several presentation modes for windows: tiled, pseudo-tiled, floating, and fullscreen. Additionally, desktops can be set to monocle layout.

Note

New users often think of these as different layouts, like i3’s tabbed mode or stacking mode. This is incorrect. These are interpretations of the same underlying tree.

The tree always exists. It is never replaced or abandoned. When you set a desktop to monocle layout, the tree remains intact with all its splits and ratios. What changes is how bspwm renders that tree.

In monocle mode, bspwm ignores the tree’s geometric subdivisions and instead displays only one window at a time, maximizing that window to fill the desktop rectangle. The other windows are still in the tree, still have their tree positions, but they are not visible. You can cycle through them with next and prev commands, which walk the tree in depth-first order and bring each window to the front in turn.

When you switch the desktop back to tiled layout, the tree structure reappears exactly as it was before monocle mode, because monocle was only a rendering choice, not a structural change.

Fullscreen is similar. When you set a window to fullscreen state, that window expands to cover its entire monitor rectangle and is raised above all other windows. But it is still a leaf in the tree. Its tree position is unchanged. Other windows are still present in their tree positions, just occluded from view. If you unfullscreen the window, the tree’s tiling layout reappears instantly because it never went away.

Floating state removes a window from the tiling space but does not remove it from the tree. A floating window can be moved and resized freely with the mouse or with explicit move and resize commands. It does not occupy any tiling space, meaning it does not affect the geometries of tiled windows. But it is still a node in the tree. You can still navigate to it with tree-based selectors. You can still swap it with other nodes, rotate the subtree it belongs to, or query its tree path. It is simply rendered differently—placed wherever you position it rather than in the geometry calculated from its tree path.

Pseudo-tiled is a hybrid state. The window remains in the tree and occupies tiling space like a tiled window, but it does not expand to fill that space. Instead, it centers itself within the available rectangle at its preferred size, as reported through X size hints. This is useful for windows that have intrinsic dimensions, like dialogs or image viewers, which look wrong when stretched to arbitrary sizes. They participate in the tree’s space allocation but render at their natural size.

All of these states coexist within the same tree. You can have a desktop with two tiled windows, one floating window, and one fullscreen window, all simultaneously present in the tree structure. The tree determines topology. State determines rendering. They are orthogonal properties.

This explains why closing a floating window does not affect tiled window geometries, even though closing a tiled window does. When a tiled window closes, its leaf node is removed from the tree, and the tree is restructured. The parent of the removed node is deleted, and the sibling of the removed node takes the parent’s place, which can change geometries for other windows if that parent was high in the tree. But a floating window occupies no tiling space, so removing its leaf node does not require restructuring. The tree simply has one fewer leaf, and nothing else changes.