I love computers and I love user interfaces. I’m pretty lucky to have had access to so much beauty and function. The first real desktop I fell in love with was on my Amiga 2000, circa 1987, and it’s not that different from what we have today – a desktop with icons, a mouse with a highly-responsive, high-precision, (even animated!) cursor, and the ability to run many apps side by side. So have we come much farther?
You have to make an effort in this information age to remain productive. We are constantly bombarded with incoming data that overloads our senses and shuts down our own creativity. Even the ultimate interactive device, the computer, is more and more just used as a browser of the various garbage heaps strewn about the internet.
For me, productivity begins when you move your hand from the mouse to the keyboard. That’s the moment where you begin to carve something out. Other than when applied to computer modelers and other artists, this rule is pretty reliable. Nobody gets any real work done on an iPad or iPhone. Oh snap! Following this line of thought, the primary purpose of an excellent desktop user interface is to move you from desktop to desktop and app to app with the least amount of mouse effort. Following from that, these are the specific primary goals of the ultimate desktop experience:
- Support 2 monitors. When you really get into a task, you’re going to want to maximize its primary window. But almost every task will require movement of data from one app to another. Two windows allows one task to be quickly maximized with the keyboard, and then the other window can be used to host all the other supporting apps, or a maximized second app, as needed. It’s the perfect configuration to display 2..n apps at once.
- Support 4 virtual desktops. This is basically the number of tasks that you would work on at the same time. It’s a balanced number – any less and you are not at your most productive, any more and the number of things you’re doing simultaneously get hard to track.
- Support keyboard driven app switching, maximization, and minimization. This lets you do the most common window tasks quickly without even moving to the mouse at all.
- Support keyboard driven virtual desktop switching, again to perform the most common tasks at lightening speed.
- Support keyboard driven movement of the focused app to any other desktop. Another of the most common actions required to organize your major tasks.
Those are the big tasks, dealing with apps that are typically taking up an entire screen. You will find that most modern desktop environments have evolved to provide these basic mechanisms.
What about when you need to work with several apps at once? There are a few different approaches to arranging multiple apps on one screen:
- Dynamic tiling
- Keyboard-driven tiling
- Manual mouse-driven tiling, with keyboard assistance
Dynamic tiling is a great idea, but it should come with the ability to adjust the width and height of the columns and rows very quickly, and that seems to be lacking. Most windows managers at least provide the third option, which should come with these accelerators to be efficient:
- Provide keyboard modifiers to instantly move and resize the window from any mouse location over the window.
- Provide window snapping at every edge.
How do the big ones stack up? After the break…
(todo)
- fluxbox
- Fluxbox has been my minimalistic favorite for years. I’ve had it configured well for years.
- The tiling command is great, one keystroke to equally tile all the windows on the current screen. I don’t know of any way to easily adjust row/col width/height.
- window snapping
- KDE
- I was able to set up keyboard modifiers to accomplish the major goals in a matter of minutes.
- KDE has a dynamic tiling mode, turned off by default. It can be really confusing. There doesn’t appear to be a way to easily adjust row/col width/height.
- Window snapping is fantastic, I set it to 30pix and manual tiling worked very well.
- Unfortunately, KDE was looking great until it started locking up for seconds at a time. Still under investigation but currently a no-go…
- Xfce4
- The basic desktop keyboard modifiers took a little bit more to set up here. You might think key customization is available under Keyboard settings, but there, only app shortcuts are defined – although some of them have to do with window manipulations. Dig into Window Manager keyboard settings for the rest of them.
- Tiling is not very evolved, there are four keystrokes available to tile the current app to the top/bottom/left/right of the current screen. Pretty cumbersome.
- window snapping
- Windows 7
- Out of the box, Windows 7 sucks pretty badly. You’re going to HAVE to bolt on something to get Windows 7 to even play ball here. Dexpot is my current choice for a virtual desktop environment with hotkeys to switch desktops, move windows between desktops, etc. It’s reliable for the most part but pretty buggy compared to linux environments, especially when switching desktops. There is a significant hiccup as windows are hidden and shown, and if you switch twice without waiting for this hiccup, it will start misplacing windows on your desktop. Pretty basically flawed.
- Another area where Windows 7 crushes your productivity is in simply highlighting the active app. If you are going to be primarily using the keyboard to switch between apps, and continue typing without breaking, this is the most basic of needs so you know where your input is going to go. I’ve found a way to slightly improve it, involving registry tweaks. First, go to Control Panel -> Personalize, and select black for the theme chooser “Window Color”. Then, set these in the registry, and you’ll have almost-passable black active window and gray inactive:
HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationOpaqueBlend = 1 HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationBlurBalance = 0
- Window tiling has been built into Windows for a decade, but again, it’s poorly done. You can use this VB script to do it, but I have yet to successfully map it to a keystroke:
dim objShell set objShell = CreateObject("Shell.Application") objShell.TileVertically set objShell = nothing
Fluxbox is the shiznitz. I don’t need no stinking Start button. The right-click anywhere menu reminds me of NeXT.
Ain’t it tho! In fluxbox, I assigned Ctrl-Esc to also pop up the right click menu – that’s baked into my brain from popping up the hidden taskbar in windoze. I also run conky and wrote a script for a key to toggle it to slide out then back so I can instantly see the time, cpu usage, etc. It’s perfect.
Gotta finish this writeup, having fun trying lots of stuff out, but as usual never enough time. 🙂 Got a second favorite, John? Everyone seems to be loving Xfce4 lately. Not overly impressed so far.
icewm perhaps? My Linux lappy is an ancient dell latitude, so a big part of me going minimalist for WM was performance.
Speaking of performance, chromium beats the PANTS off of Iceape (firefox). I found myself choosing Dillo over Iceape because it was such a PIG. Thank you Google for Chrome!
Yep chrome is nice and fast. And now that it has a working Adblock I use it for most browsing. But I still can’t live without Firefox + Firebug when doing JavaScript/Ajax/CSS/etc!
I’ll kick icewm around too when I get time, thanks man!