Skip to main content

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.


Unknown 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. :-)
Anonymous 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.
jjinux 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.
Unknown 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.
jjinux 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
jjinux said…
jjinux 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?
jjinux 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?

Popular posts from this blog

Ubuntu 20.04 on a 2015 15" MacBook Pro

I decided to give Ubuntu 20.04 a try on my 2015 15" MacBook Pro. I didn't actually install it; I just live booted from a USB thumb drive which was enough to try out everything I wanted. In summary, it's not perfect, and issues with my camera would prevent me from switching, but given the right hardware, I think it's a really viable option. The first thing I wanted to try was what would happen if I plugged in a non-HiDPI screen given that my laptop has a HiDPI screen. Without sub-pixel scaling, whatever scale rate I picked for one screen would apply to the other. However, once I turned on sub-pixel scaling, I was able to pick different scale rates for the internal and external displays. That looked ok. I tried plugging in and unplugging multiple times, and it didn't crash. I doubt it'd work with my Thunderbolt display at work, but it worked fine for my HDMI displays at home. I even plugged it into my TV, and it stuck to the 100% scaling I picked for the othe

ERNOS: Erlang Networked Operating System

I've been reading Dreaming in Code lately, and I really like it. If you're not a dreamer, you may safely skip the rest of this post ;) In Chapter 10, "Engineers and Artists", Alan Kay, John Backus, and Jaron Lanier really got me thinking. I've also been thinking a lot about Minix 3 , Erlang , and the original Lisp machine . The ideas are beginning to synthesize into something cohesive--more than just the sum of their parts. Now, I'm sure that many of these ideas have already been envisioned within , LLVM , Microsoft's Singularity project, or in some other place that I haven't managed to discover or fully read, but I'm going to blog them anyway. Rather than wax philosophical, let me just dump out some ideas: Start with Minix 3. It's a new microkernel, and it's meant for real use, unlike the original Minix. "This new OS is extremely small, with the part that runs in kernel mode under 4000 lines of executable code.&quo

Haskell or Erlang?

I've coded in both Erlang and Haskell. Erlang is practical, efficient, and useful. It's got a wonderful niche in the distributed world, and it has some real success stories such as CouchDB and Haskell is elegant and beautiful. It's been successful in various programming language competitions. I have some experience in both, but I'm thinking it's time to really commit to learning one of them on a professional level. They both have good books out now, and it's probably time I read one of those books cover to cover. My question is which? Back in 2000, Perl had established a real niche for systems administration, CGI, and text processing. The syntax wasn't exactly beautiful (unless you're into that sort of thing), but it was popular and mature. Python hadn't really become popular, nor did it really have a strong niche (at least as far as I could see). I went with Python because of its elegance, but since then, I've coded both p