Last week, I rebooted my machine to upgrade its hardware. I took advantage of that to also see about upgrading its window manager. I had been using [[ION2 http://en.wikipedia.org/wiki/Ion_%28window_manager%29]] for basically a decade, and just had no idea what was happening in the rest of the world (except some noise about Gnome 3 being crap.)

ION was a miracle for me. I remember when I first saw Windows coming from DOS, I wondered what the point of displaying several windows might possibly be. And GUIs just sucked compared to the ease of keyboard shortcuts. I was vindicated when I first stepped in a research lab where they used Unix (Solaris, I guess): here’s an enormous screen, but basically all it’s displaying is… xterms. So the only point of X was the ability to display several //text// applications at once.

I spent the following years suffering through Windows 3, Windows 95, SunOS and Solaris, thinking the UI was useless. In particular, feeling like I spent way too much time arranging windows myself, which I never had to do under DOS.

Then ION came out. It was efficient (used the entire screen and arranged the windows for you), intuitive (it worked basically the same way that emacs or Vim splitting works), and integrated perfectly with mostly-text applications. I’ve used only ION2 on Unix ever since it came out.

Recently I heard of //[[awesome http://awesome.naquadah.org/]]//, which was supposed to be better and more modern. So I tried it for a week, which I will acknowledge is not enough to discover all its feature, but which I hope is long enough to get a good idea of how it works.

The biggest difference between //awesome// and ION is that //awesome// is dynamic. The idea is to have a the screen divided into a main working area and a //stacking// area. The window into which work happens (e.g. your editor) occupies the main area, while other windows get relegated into the stacking area. You can quickly move to the stacking area for simple tasks (e.g. compile), or easily move a window from the stacking area to the main area, in which case the main window gets moved to the stacking area. And opening a new window automatically moves it to the main area, and moves the current main window to the stacking area. The windows in the stacking area get automatically mashed down little by little.

Sounds confusing? Yeah, it is a bit, and that’s really my biggest problem with //awesome// in the end. Typically, I’ll have an editor window, a compile terminal an a run terminal, and maybe also a mail client terminal. Because the stacking area is dynamic, I’m never really quite sure where my terminals are, and they may be moving around as new window appear. And if too many windows open, they become uselessly small.

Compare to ION’s static, tabbed layout: a window is always in the same geographic place, unless I move it myself. In the end, I wished //awesome// had tabbing and I didn’t like the dynamism of it. Now don’t get me wrong: my spending 10 years with ION probably shaped my way of interacting with the window manager, and I can understand some will prefer the dynamic windowing. However, if you’re currently using a floating window manager and consider moving to something more efficient, I’d advise giving both //awesome// and ION a week’s try each to see which is best suited to the way your brain works.

On the other hand, //awesome//’s default keybindings all use the Windows key. I wonder why I never thought of that, and I wonder why ION’s default bindings don’t use that as well instead of ALT, which conflicts with some applications.

So I’m now upgrading to [[notion http://notion.sourceforge.net/]], the successor to ION, and seeing about simplifying the key bindings: my goal is to bind all common operations to a simple //Win+1 key// instead of the current ALT+K + operation. More on that in a later post.