Rethinking the window manager
Copyright © 2001-2010 Nick Gravgaard

  • ...thank you for creating such a wonderful WM as WindowLab. It's so extremely clean and simple and fast and easy, just what I was looking for.
  • ...I must say, I'm very impressed. It has a lot of new implementations of features which tend to be rather stalely implememented in other 'new' windowmanagers.
  • Your window manager rocks...
  • Having worked with it a little bit, I can honestly say that WindowLab is a great application. It's fast and responsive, and building the menu is simple, fast, and very straightforward. Congratulations on creating such an excellent product!
  • I just downloaded, compiled and installed your excellent window manager. Its cleanness, innovation and attractive appearance blew me away. When I switched to linux two years ago, this is what I imagined it would be like: fast and clean.
WindowLab screenshot
Background image courtesy of eBoy

What is WindowLab?
WindowLab is a small and simple window manager of novel design.

It has a click-to-focus but not raise-on-focus policy, a window resizing mechanism that allows one or many edges of a window to be changed in one action, and an innovative menubar that shares the same part of the screen as the taskbar. Window titlebars are prevented from going off the edge of the screen by constraining the mouse pointer, and when appropriate the pointer is also constrained to the taskbar/menubar in order to make target menu items easier to hit.

Why use WindowLab? Where can I get WindowLab?
windowlab-1.40.tar was released on 2010-04-04. Here's a list of every version that's ever been released: 1.0, 1.3, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29, 1.30, 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39, 1.40

How can I stay informed about WindowLab?
Subscribing to the project on should keep you informed of new releases.

WindowLab was written by Nick Gravgaard ()

WindowLab is Free Software and has been released under the GPL. Please see the LICENCE file for more information.

How do I install WindowLab?
Before compiling, check the default (DEF_foo) options in windowlab.h, and the defines in the Makefile. DEF_FONT is of particular interest; make sure that it is defined to something that exists on your system. You can turn -DSHAPE off if you don't have the Shape extension, and -DMWM_HINTS on if you have the Lesstif or Motif headers installed.

"make" will compile everything, and "make install" will install it.

To make WindowLab your default window manager, edit ~/.xinitrc (if you start X from the console by typing "startx") or ~/.xsession (if you start with a graphical login manager) and change the last line to "exec windowlab".

If you use FreeBSD, you can get WindowLab from /usr/ports/x11-wm/windowlab/

How do I use WindowLab?
WindowLab places a taskbar at the top of the screen and adds a titlebar to the top of each window. These titlebars consist of a draggable area, and three icons on the right hand side. When left clicked, these icons: Another way of toggling a window's Z order (depth) is by double left clicking on the draggable part of its titlebar.

Windows' titlebars are prevented from leaving the screen and cannot overlap the taskbar.

The taskbar should list all windows currently in use. Left clicking on a window's taskbar item will give that window focus and toggle its Z order (depth).

To resize the active window hold down alt and push against the window's edges with the left mouse button down.

If you right click outside a client window, WindowLab's taskbar becomes a menubar. Releasing the right mouse button over a selected menu item will start a corresponding external program. WindowLab will look in each of the following files in turn for definitions of the menu labels and commands: Each line in the menurc file should have the menu label, a colon, and then the corresponding command, eg:

The GIMP:gimp

New windows (that don't specify their location) are positioned according to the coordinates of the mouse - the top-left hand corner of a new window is set to the location of the mouse pointer (if necessary the window will be moved to ensure that all of it is on the screen).

WindowLab has the following keyboard controls. Hold down alt and press: How can I help?
If you find a bug please tell me about it by emailing (if you know how to fix it, even better). If you really like WindowLab, please tell others about it so that the number of potential users/contributors may increase.

Design rationale
Before I started WindowLab, I'd been an Amiga user who had switched to Linux around 1998. To my mind, window managers (like text editors and file managers) are one of the most important parts of any system for the user, and I wasn't satisfied with those that already existed. At that time FVWM2 was the most commonly used Linux window manager but it was far too large for my tastes, and I suspected that one of the reasons for this was that it was designed to handle so many different options.

So I started work on my own window manager, basing it on aewm. The most important feature to my mind was to implement the Amiga's click-to-focus but not raise-on-focus behaviour, where a focused window is not necessarily in front of other windows. Realising that it can be hard to get to a windows buttons if it is behind another window, I added a simplified Windows 95 style taskbar so that users could easily access each window.

Another neat feature of the Amiga's GUI that had not been done before in an X window manager was the constraining of the pointer when the user tried to drag a window beyond the edge of the screen. In this way, WindowLab treats windows like they are Amiga screens in that a window's titlebar is constrained to the physical screen. At this point I started to think about the issue of launching programs from WindowLab. aewm's approach was that taskbars and launching files was not part of the window manager's job, and I respected the minimalist reasoning behind this, but since my constrained windows took it for granted that a taskbar existed at the top of the screen, I reasoned that the taskbar was best kept within the window manager. With the taskbar taking up as much space as a menu bar would, I realised that I could reuse space just like the Amiga had done by making a menu bar available when the right mouse button is held down. My twist was that rather than have drop down menus, my menubar would consist of "bang" menu items a little like the "Quick Launch" toolbar in Windows 98, and by keeping the menu one level deep, I could reuse the constrained mouse pointer trick to make target menu items easier to hit (infinitely tall according to Fitts's law).

I also wanted windows to be able to act like screens on the Amiga (where the title bar and client area can take up all of the screen), and this forced me to rule out any useful kind of draggable window borders. Earlier versions (up to 1.20) used an 8½ (from Plan 9) style resizing mechanism, but some users complained that it meant that each edge of the window changed even if only a small resize was intended. The mechanism that replaced it is completely original, and quicker and easier to use than traditional draggable borders (allowing one or many edges of a window to be changed in one action without the user having to click on thin window borders).

Tips and tricks If you know any other tips for use with WindowLab, please get in contact with me so that I can list them here.

Thanks to Decklin Foster who wrote aewm (v1.1.2 to be precise) on which WindowLab is based. He's done a superb job of writing a minimal window manager and was good enough to release it under a liberal licence that allows anyone to add their favourite GPL or BSD flavour as they see fit.

Creative Commons GPL
This software is licensed under the CC-GNU GPL.

Valid HTML5!
up to