You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
Foo Window Manager is a minimalistic window manager that does two things and two things only:
Provides a tree data structure in which you can organize windows.
Provides a socket for IPC along with a basic DSL for manipulating and traversing the tree.
As a results ofonly doing these two things,foo-wm most likely works a bit differently than other window managers you may be acquainted with. Mainly, strangest of all to the newcomer,foo-wmdoes not provide: workspaces or keybindings. The former can be emulated through foo-wm's tree and the latter can be provided through any X keybinding program (such asxbindkeys).
A foreword:foo-wm should be considered unusable alpha software. I usefoo-wm on a daily basis, although that doesn't mean you should (unless you are interested in contributing).foo-wm doesn't have full support for many basic window managment functions (ICCCM/EWMH). Although, ICCCM/EWMH support is a top priority currently.
The Makefile will generate:
foo-wm: The window manager itself which can be thrown in.xinitrc. It is reccomeneded that you startfoo-wm with a keybindings manager, such as.xbindkeys, as it will be very diffucult to interact withfoo-wm's socket otherwise. The location and name of the socket, is to be specified insrc/config.h. If noSOCKET_NAME, is specified then a name will be automatically generated based on the PID of the socket in the form of/tmp/foo-wm-pid.socket.
foo-wm-c: This is a simple and dumb command line client for interacting withfoo-wm.foo-wm-c takes the syntax offoo-wm-c '/tmp/your-foo-socket.socket' 'ipc command'. Any language that provides a UNIX socket interface can be used to communicate withfoo-wm,foo-wm-c is just a simple C client for doing so. Additionally a ruby client for interacting withfoo-wm's socket can be found atscrips/client.rb
The Tree
All operations infoo-wm are related to manipulating and the traversal of the tree. All nodes within the tree are one of two types.
Client Nodes
Just a single X11 Window
Container Nodes
Holds one or more otherClient orContainer Nodes
Has aLayout property which may be changed with thelayout IPC command
At any given time usingfoo-wm there are three essential nodes within the tree at play:
Root Node
The top of the tree
Issuing a zoom command with a negative delta approximates this node
Focus Node
The node which is currently manipulated on by using IPC commands
Issuing a zoom command with a positive delta approximates this node
View Node
The node which the screen is currently viewing
The FOO-DSL and the Zooming Nature
Now that you understand that all foo-wm does is maintain a tree of windows, now you'll want to know how to mainuplate the windows in the tree. For this, you simply send commands to foo-wm in the specifications provided inFOO-DSL.md.
For example, sending the zoom command through the provided command line client.foo-wm-c '/tmp/foo-wm.socket' 'zoom 2'
Inspiration
Inspirations include:DWM, monsterwm, catwm, dminiwm, i3, herbstluftwm, wmii, and tinywm
Contributing
Foo Window Manager is very much open to contribution. Please get in touch via email if you are interested or just take a stab at something inTODO.md and send a pull request.
About
A minimal window manager that organizes windows in a tree data structure, provides a socket to send commands to, and nothing more.