Foo Wm was an idealistic & minimalistic wm for X11 which I built over the course of a summer while doing Hacker School. The architecture of the wm was simple, involving only two components:
- A tree data structure to hold windows and
- A DSL to manipulate & traverse the window tree
foo-wm 'tiling' and 'floating' modals of organization familiar in WIMP were just setting values of containers. 'Workspaces' were just the immediate containers of the root node. And 'full-screening' a window meant simply issuing a
zoom DSL command with a high positive delta.
The Foo DSL, accessible via a socket, was the only way to interact with
foo-wm itself. In fact,
foo-wm didn't even provide a way to bind keys to wm actions, because xbindkeys could and still can do that anyway.
All commands in the Foo DSL operated on two pointer nodes within the tree. The
active node controlled the node currently through-putting mouse and keyboard events; and the
view node represented the node that the screen was currently displaying. The full DSL was as follows:
||Zooms screen through tree.|
||Wraps current node in a new parent node.|
||Moves focus pointer to brother in focus node's parent.|
||Moves focus node's parent position relative to its parent.|
||Removes focus node window from tree.|
||Sets a bookmark on the current viewnode.|
||Restores a bookmark of viewnode set with
foo-wm I used it for about a year on and off. Being my first major serious C project; I learned to about
memset the hard way -- watching my windows crash and burn.
I've since stopped using
foo-wm because I was too lazy to implement full EWMH window hinting, which substantially limited the number of applications I could use within
foo-wm without annoyance.
When I go to build my next wm I'll likely scrap
foo-wm and take a completely different approach1 to a meta-wm/DSL-based-wm altogether.
While Foo Wm may be dead, it spirit lives on in some form. The
0.1 release of Bspwm, a popular tree-based wm within the Arch community, was based around the server/client architecture that I built into