Sunday, February 8, 2009

Awesome

Awesome
Awesome is not just an exclamation - it is a name for perfect window manager utilizing tiling windows concept. It can be used for X windows systems on the *nix and BSD systems. I'm using it now, and I would like to share awesome experience.

Background
The idea of multiple windows shown at the same time on the single screen is known for times. Curses, TurboVision creates interfaces capable of showing pseudo-windows with ASCII characters. Bunch of software called terminal multiplexers (see Terminal Multiplexers on Wikipedia) is used for showing several text program outputs on the same text terminal. The best use case I can see is tailing several log files to monitor distributed activity in runtime. Or I can run some commands in the active console, and watch their output (which goes to file :) ) on other virtual terminal.

Nowadays people mostly use graphical user interface. In the Unixes X Window system makes all the low-level work on rendering data and basic manipulating windows. In the Redmond-like GUIs we got used to window decoration, overlapping windows, task bar showing tasks being executed, ability to drag and resize windows with mouse. All this stuff in the Unix world is done by Window Manager (WM). There are different WM's doing their job in different way.

You might have noticed monitor aspect ratio change trend. Monitors are going wider. Resolution goes higher. Have you ever tried maximizing any file manager on the 1920x1200 resolution? One may feel uncomfortable and lost in such a wide space with lots of icons. There is not that much tasks that really require that much information shown on-screen simultaneously. On the other side, if you open lots of windows to utilize informational space, you can run into problems with finding appropriate one.

Tiling window managers
The descendants of the terminal multiplexers are tiling window managers. General idea is to split the screen into non-overlapping areas, and put each window into appropriate area. With this concept, you can see all the information at the same time. And you don't need press Alt+Tab all the time :).
Tiling concept is extended with various features, such as different focus models, static or dynamic window arrangement, virtual desktops/tags, tabs to arrange windows in the single slot, and much, much more.
I am using Awesome window manager.

Awesome features
  • Dynamic layout model. When new window gets opened you do not need to position it somewhere manually. Awesome decides where to put it based on the windows role, current configuration and layout.
  • Full keyboard control. You can do everything with keyboard. Move focus forward/backward, switch layouts, rearrange windows, change cell size, etc...
  • Full mouse control. In addition to keyboard, you can do all the stuff mentioned above with your mouse. It is very handy when working with graphic editors, for example.
  • Tags. You might have heard of virtual desktops - concept, used heavily in Unix desktop environments. Tags are different. Instead of setting single virtual desktop for window you can assign several tags to it, and window will be shown in each of these tags. This feature allows you to show some important windows on all the tags (so they are visible all the time)
  • Layout models. Awesome allows to assign different layouts for tags. Windows can be arranged vertically, horizontally, full-screen, maximized, centered (active window is in center of screen, all other are in background tiled vertically), spiral, flying. The least one is the layout all of us got used to - overlapping windows. Yes, for some tasks it is very handy.
  • Performance. Awesome does no windows decoration. No borders, no headers. Awesome uses XCB - the fastest way of talking to X server by now. Size of the program is 8 MB. Even when I do full compilation of my project, and both kernels are fully loaded, I can manage windows normally.
  • Programmability. Awesome itself is written in C, but all less important features (menu, key bindings, tag switcher, task bar, tray icon, clock, etc...) are written in Lua - scripting language. You can easily change anything you want. This does not even require recompilation.
Screenshots
Here are some screenshots made on my workstation.
1. Vertical layout. Red border across top window (FireFox) indicates focus. Top line is the task bar. Small icon is the menu icon, 1-9 are tags. Taskbar is long, and spans across all free space. Clock is the widget i wrote myself in Lua. The lease element is the system tray having Skype and Pidgin icon.
2. Dual-monitor setup. The left screen has several IM windows with horizontal tag layout, the right part has Thunderbird and terminal opened. Two monitors are my laptop primary screen (15" 1680x1050) and external Dell monitor (24" 1680x1050). The Awesome setup shown here is outdated for me.
3. Current layout in centered mode. One window is in center, but allows seeing other. Yellow border is a mark border. You can perform single operation to several marked windows. So, window group operations are supported in Awesome, too.

Hope this posting may help someone find own way :) at least in computer interfaces.

9 comments:

Denis Tsyplakov said...

>>Isn't that evil, don't you think?
Do not.
You are using letter from a to z, but in order to enter some numbers you must use numeric key 0-9, is it evil?
mouse and keyboard both are useful.

Alexander said...

Idea of mouse being evil came to me after some hard touchpad usage :)

Valery said...

The similar tool for Windows systems is WinSplit Revolution. It can be found here
and also look at the new windows management features in windows se7en. They are not so powerful but imho very handy to use :)

Alexander said...

Valery, have you seen how much tries does guy in the video need to complete single action?

I've noticed him double-clicking window header 4 times before restoring it from maximized state.

This is off-topic. But I don't think I really like HP TouchSmart(?) if it works in that way.

Valery said...

Agree with you. Just don't pay attention to multitouch interface on this video. I guess either dude haven't got used to multitouch or that display is really awful =)

Valery said...

and another one:
New Window Management Options in Windows 7

Anonymous said...

I've tried winsplit revolution a couple of times. It seems to require too much input from the mouse.

For Windows users with multi-monitor setups, the best tool I've come across (even though its not a WM) is ultramon. It's basically just adds a taskbar for each additional monitor. It seems like most of the Windows apps I use amazingly require the full real estate of the monitor... Here's a pic of my setup. Maybe I should switch to linux ? :)

Zoltán Nagy said...

Nice post. I just switched to Awesome myself (from XMonad, another tiling
WM).
Off: does the bottom right window really show the the folders of XCOM
1 (Ufo)? :D

Alexander said...

Yes, you are right :)

This is "Enemy unknown", first one.

Honestly saying, I had to remove this game together with DosBOX, cause it started eating too much time :) :).

Looks like it does not get older - people still know what it is.