September 19th, 2008
The chosen WM is the xmonad, mostly because of its support for Xinerama - I found a configuration of WMII and Ion for multi-headed, non-xinerama display a bit hard and unpractical. Then I've learned that it was a good choice also because of other reasons; it's a VERY configurable, featureful, fast and extensible WM. Although the title might sound a bit like a text from some big corporation marketing action, xmonad does it. Really.
It's written in haskell, with code base of about 1.5k lines (not counting commentaries) and a lot of contributed extensions (package xmonad-contrib). Its config file is also a pure haskell module which is automatically compiled on each xmonad start (or restart). That makes it fast and pretty stable but has drawbacks. Config file in the beginning is pretty illegible and haskell compiler (GHC) is required for its work. I don't know haskell (yet!), but I managed to configure it, so it can't be that hard.
To use it I had to extend its functionality to satisfactory level (default config makes it rather bare). This are the things which I added (requires only the xmonad-contrib package, one shell script for status bar + some user scripts):
- Conditional config suitable for a xinerama display and a single display.
- Status bar on both monitors using dzen2 with memory usage bar, workspaces, current layout and date
- Tabbed layout
- Named workspaces, switching between current and previous workspace
- Autocompleted prompts of windows and workspaces
- DirExec - autocompleted executing of scripts from a configured directory (e.g. locking display...)
- ShellExec - autocompleted executing programs from our $PATH (better than standard dmenu)
- Making web searches (google, wiki)
- Creation of window copies
- other like for e.g. removal of borders around full-screen mplayer, avoiding clutter of main window with floats etc.
Approach to workspaces
I'm used to having a lot of "virtual desktops", so here I've also created them a lot. WMII has a nice feature - it can tag any number of windows with any number of tags and then display certain set of tagged windows on a screen - practically creating any number of workspaces containing any chosen windows. I emulate this partially, but sufficiently.
There are 9+13=22 workspaces, nine for temporary windows numbered 1 to 9 and accessible via M-(1..9) keybinding (see below)
and 13 named workspaces accessible from autocompleted menu: web web2 web3 im irc mail dev dev2 dev3 adm adm2 adm3 music. Newly created firefox windows land on the "web", pidgin on "im", amarokapp on "music" and claws-mail on "mail".
Although a screenshot clearly can't make you feel this power, but here it is. Featuring XMonad on two monitors, vimperator and some random windows (BTW: Vimperator is a Firefox plugin making it behave like a vim, allows mouse-less browsing and is a great complement to the tilling WM).
I guess there is no such a thing as a "standard xmonad configuration". When configuring it you have a feeling you are programming a totally new window manager, which will behave exactly as you imagined. Even better if you know haskell.
I use the same configuration on notebook and on a desktop therefore there's a variable setting xinerama config on/off. Last config update on 26.11.2008 (version 0.2).
Default keybinding list
I decided to design the extending keybindings without much differing from the default idea. "M" is a Mod key, which I set to the win button, not used for anything else (S stands for shift). By default M is set to the left alt. I left the basic keybinding as they were (most of them listed, but rarely used omitted):
M-j M-k - swaps focus between windows on one workspace
M-tab M-S-tab - like above
M-h M-l - resizes the master window space (most layouts have such a space)
M-, M-. - change the number of windows in master window area
M-S-j M-S-k - swaps windows on the workspace
M-enter - sets focused window as a master one
M-S-enter - opens terminal
M-e M-w - swaps focus between monitors
M-p - opens at the top an autocompleted list with programs from $PATH and runs one. (Changed to ShellExec)
M-space - changes layout to the next in a list (Tall, Mirrored Tall, Tabbed, Full)
M-S-c - kills a window
M-q - restart (reread the config file)
M-S-q - quit
M-1...M-9 - selects workspace
Extended keybinding list
Following were added by me, and aren't standard (but are crucial!):
These open auto completed prompts at the bottom of the screen and perform an action on a selection:
M-z - move focus to the selected named workspace (can select also numbers from 1 to 9)
M-S-z - move focused window to the selected workspace
M-backspace - switch workspace between current and previous one.
M-x - prompt for any opened window by a title; move focus to the selected window
M-S-x - move selected window to the current workspace
M-a - run a script from ~/.xmonad/scripts (used for locking the screen and turning off a cron-tabbed alarm)
M-v - copy focused window to the selected workspace.
M-s - after this press 'g, w, p' which stands for search on google, wiki, and polish wiki.
M-m - prompt for manual page
M-S-v - window can be displayed on various workspaces; this closes all but focused copy of a window
This is a mail of my good friend who loves rubbish email. Send him some if you want to land on my not-so-welcome lists: John Sparrow email@example.com john(at)thera.be