leah blogs

February 2010

25feb2010 · Window management revisited

Two years ago I wrote Thoughts on window management, and in the meantime, I returned to using Linux computers for a really significant part of my digital life. Thus, it was time got pick a window manager again. I think I then tried just about every significant one and lots of unknown forks, experiments and abandoned ones.

Revisiting the ten points, I consider them still all to be valid and applied them with minor tweaks in my current setup.

A screenshot of my cwm setup

I now use the cwm window manager, an OpenBSD fork of calmwm which runs with a few small patches under any Unix. (I wrote an Arch PKGBUILD for it and also keep a Git mirror.)

cwm is a small window manager without many frills or decoration other than a simple border, but it has good and customizable keyboard control, and features just what I need: cwm uses “focus follows mouse” (the one true thing for X11 in my opinion) but does not use “click to raise”. Thus your window setup only changes when you really need it, and due to overlapping you can use your (always) limited screen space fully.

Each window can belong to one cwm group. I defined four groups: terminals, editors, browsers, distraction (e.g. IM, Twitter). By pressing the appropriate keybindings (Super-1 to Super-4), I can quickly toggle display of these windows.

Windows stay at their fixed size and position, though it is easy to maximize them full or vertically if I need it (most run vertically maximized anyway as it’s only 768 pixels). cwm doesn’t save positions, but many do it themselves or are started with appropriate geometry. Thus, spatial memory can be used as applications don’t jump around wildly.

Super-Button1 raises a window, while Super-Button3 lowers it. This is incredibly useful for an operation I call “drill-down”. Just press Super-Button3 a few times where you expect the window until you found it. This and Meta-Tab to switch between the last focused window are my main means of reaching lowered windows.

cwm itself doesn’t have a status bar, and only features a launch menu I rarely use: I wrote a status bar using conky and a launcher with dzen2. The status bar displays useful information on the top right like the time, current networks and my IP address on them, audio volume, CPU temperature, memory, CPU and battery usage as well as the currently playing song. On the top left there’s my launcher, which tries to switch to applications if they already run. I wrote a small script featuring xdotool for this task. There’s also a small dzen in the top right corner than locks my screen when I click on it.

This top bar is visible all the time, except for full-screen when watching a movie.

The structure of my desktop continues inside the applications: Almost everything uses tabs (Firefox, Pidgin, Emacs, URxvt with tmux), and I configured all applications to use Meta-Left/Right for switching tabs. Conformity really pays out here once you have the keybindings in muscle memory. In general, I only have one window open of any kind and use tabs to multiplex them. But when I really need to look at a few things at once, I can just drag out the tab (or copy the tmux session) into a new window. I rarely need other windows than these, most things are done in the shell, Emacs or the browser.

NP: Gang of Four—Natural’s Not In It (Ladytron Remodel)

Copyright © 2004–2022