Thursday, November 04, 2010

Linux: The Tiling Window Manager I Wish I Had

Every year or two, I switch to a tiling window manager such as xmonad or dwm. Inevitably, I switch back to GNOME after a couple weeks. Sometimes it's because the window manager doesn't fit in with the rest of my GNOME desktop (it used to be non-trivial to get xmonad to work with GNOME's panel). Sometimes it's because of bugs related to having a weird window manager (NetBeans used to freak out with xmonad, and Flash refused to go full-screen). Every time I try again, a bunch of things have improved. xmonad even had a project aimed at making it more accessible to GNOME users. Still, I think the biggest problem I have is that tiling window managers make some assumptions that just don't work out for me in practice.

I use more than just terminals. I still like to use things like GVim, the GIMP, Google Chrome, a graphical chat client, etc. In fact, I even get a real kick out of writing GUIs. Some tiling window managers assume you're going to live in a terminal (which is partially true), and they only give special attential to GUIs like the GIMP as an afterthought. The ramifications of that attitude tend to be frustrating in practice.

Ease of use is important. I'm as good at reading man pages as the next guy, but it's even better when I don't have to. Furthermore, every minute that I spend reading man pages is time I'm not a) getting my real work done b) actually using the software. It's really helpful if I can switch to a new window manager without spending a day trying to memorize all the key bindings or struggling to get it to work on my Ubuntu GNOME desktop. Don't get me wrong--I love hot keys, but it's better when I can learn them as I'm using the software (Firefox is like that). Furthermore, graphical configuration utilities are helpful, but don't go overboard. Whenever possible, I shouldn't have to configure it to do the right thing; it should do the right thing by default.

I want to see my desktop background. I'm a little bit on the obsessive compulsive side. Hence, my desk is always as empty as possible. I feel uncomfortable when it's messy. In the same way, when my desktop has only a couple windows open and I can see the desktop background, I feel like things are calm and under control. If my entire desktop is covered with text, I feel like I'm out of control. There's no reason why by default my 27" monitor needs to be completely covered in order for me to edit a single file. (Note, I make heavy use of virtual desktops in order to keep each individual desktop sparse and well organized.)

I want window decorations. More specifically, since I have a 27" monitor, I can afford to have more than a single pixel in order to separate windows. If there are nice borders between windows, it looks cleaner and more under control. Having text from two windows be only a single pixel apart makes me feel uncomfortable. Nice raised, lowered, etc. borders have been an important tool for UI designers for several decades--use them. Furthermoe, I want buttons. Buttons help you get started using software you're unfamiliar with. I know xmonad has done some work on this. If the buttons have mouse-over text containing the hot-keys, that's even better because it means I can learn the software and become faster as I'm using the software.

Windows should only expand when I ask them to. I don't need a confirm dialog to cover my entire 27" monitor. Most GUI windows know how big they should be by default, so it's best to respect that by default. This is really important with the GIMP. However, it's also important with things like GVim. By default, I want my terminal and GVim to be 80 columns wide. However, I want buttons on the bottoms and sides of the window so that I can tell the window manager that I want the window to maximize horizontally or vertically. For instance, I often want GVim to maximize vertically, but not horizontally. I want my terminal to be 80x24 unless I need to read some log file, in which case I'll press the buttons to maximize the window.

Overlapping windows are not the end of the world. A window that's too small is useless. In fact, when I use GNOME, I often stagger my windows. The windows should tile as long as there's room, but when there's not enough room, they should start to stagger. As long as I can see part of the window in order to recognize it and click on it to select it, that's fine. I also don't feel that it's strictly necessary to stick to a grid; think of how you pack a box with random items, and you'll know what I mean.

Small is not always better. My laptop has 4 gigs of RAM. Hence, it doesn't really matter if the window manager fits in 4k or 8k of RAM. It doesn't even matter to me if it takes 100 mb of RAM. Lynx is cool, but most of the time I use Google Chrome. Don't get me wrong; I like small, simple, efficient software as much as the next guy, but I also like software that's smart, friendly, and helpful. Let's face it, these days, my computer is much faster and has a lot more memory than I do, so let's optimize software for me, not the computer. Of course, let's not forget that large software can still be conceptually simple.

What I have described doesn't perfectly fit the model of a tiling window manager. What I have described is a normal window manager that has the personality of a tiling window manager. The things I like most about tiling window managers is that they are a) innovative b) helpful. I think those same characteristics would continue to be true for a hybrid window manager that behaved somewhere between a normal window manager and a tiling window manager.


Kenny said...

I never liked dwm, and I tried xmonad for 2 days, but gave it up after the Haskell hacking. We never liked each other a lot.

Instead I found `awesome', an awesome window tiling manager, with a relatively low learning curve if you already have some know-how with xmonad and dwm.

You can script your desktop easily with Lua, which is a language I really like much more than Haskell.

Flash works, and I use also use NetBeans without missing the comfort I know from GNOME, and working with GIMP is actually even better because of the flexible tiling options.

Give it a shot. You'll may like it. :-)

jae said...

I currently use openbox which allows for some tilish behaviours while still being a standard window manager. Best I've found so far, but I'm on the lookout for something pretty much like you describe. So if you find something please blog about it.

Shannon -jj Behrens said...

Great comments guys. Thanks!

Harsh said...

FWIW, KDE 4.5 has Window Tiling via KWin, with no extra cost.

Harsh said...

Another thing: KWin scripting support is coming in KDE 4.6.

Kenny said...

I heard Compiz has a "Grid" plugin.

arach said...

I use Ubuntu + Compiz + Grid and the result is just great. I can make 2x2 or 3x3 grids, I can throw windows arounds. New windows open up where there's an open spot.

I like Awesome, but when you use the Compiz + Grid, you get the nice window decoration of your choice plus some tiling behavior. You tile if you want to tile, don't if you don't want to.

Shannon -jj Behrens said...

Hmm, I tried out grid, but it didn't work out that well for me. It didn't feel "smart" enough. Maybe I'm using it wrong.

Mekk said...

Already mentioned Compiz Grid is also useful, although differently (it does not arrange windows automatically at all, but let me define keyboard shortcuts to - say - move&resize current window to upper left corner, or bottom-right, or whole right, or ...). I used it a lot before discovering PyTyle and I still use it on non-tiling desktops, really useful (I usually bind those shortcuts to combinations of Win key with keypad keys so they are trivial to remember)

For non-compiz desktops similar task can be pefrormed by PyWO

Shannon -jj Behrens said...


Shannon -jj Behrens said...

I checked out Awesome, but it just doesn't look like it'll fit in well with the rest of my Ubuntu GNOME desktop. Am I wrong?

Shannon -jj Behrens said...

I checked out pywo. It's not overly intelligent, but it looks simple and functional. I like it. Unfortunately, a lot of time on a laptop, and it's default keybindings assume you have a keypad. Is that true? What do most people with laptops do about this?