When I discovered SmartTab.org about a decade ago, I was quite happy. Never before had my window switching been so fast and nimble. The most important feature was of course the list-based view of window titles, rather than the standard mysterious icons that only coughed up their secret window titles once you landed on them. But one thing I hadn’t yet conceived of was switching to a far-off window without pressing Tab a dozen times or more. SmartTab.org quickly became so ingrained into my workflow that I even resisted changing my operating system because of it. If Windows 7 would mean giving up on all of my trusty tools like SmartTab.org and ASD Clock, I might as well upgrade to something completely different. In 2011 I switched to Debian Squeeze as my main OS and I haven’t looked back, barring perhaps the occasional game. To me, Linux is just so much more user-friendly these days. But enough about that. You can get Nimbler here or you can continue reading about my window switching philosophy.
Even before I switched, I looked for SmartTab.org alternatives. I discovered that both Openbox and KWin can display sane window lists, but superswitcher was much closer to what I wanted. Unfortunately, its C-based code was too complicated for now. I’d pretty much have to learn C first. Fast forward a few years and Fuzzy Window Switcher came out. It was a lovely little application, and it managed to scratch my itch. Someone quipped that a Compiz plugin could perform the same task. I replied that “The Compiz (plugins) source had absolutely no documentation when I last checked, nor was it so obvious that none was needed. Above all else I see [Fuzzy Window Switcher] as a great place to start for hacking together your own thing. Besides, not everyone uses Compiz. This can be useful regardless of whether you use Compiz, Mutter, xfwm4, OpenBox, KWin or whatever else there is.”
Still, I wasn’t ready. I had to learn the much easier Python first, which I didn’t start with until a few months later. By that time I was too busy, and when my schedule finally opened up again I’d forgotten about my plans. Until a couple of weeks ago a bug report reminded me that I could actually mimic what I liked about SmartTab.org. Several hours of coding later I can present Nimbler. Bear with me if you actually know GTK+ 3; I’m figuring this stuff out as I go along. Long story short, this is what it looks like:
So how does it work? I like to think it couldn’t be much more intuitive. You press the shortcut — at the moment I use <Super>grave — and the window pops up. Then you can immediately switch to any window using its identifier, the arrow keys or the mouse. You can also switch workspaces using F1-F12.
Currently non-functional, if you press colon (:) a text input box is added to the window. At some undefined point in the future I probably intend to couple this with Fuzzy Window Switcher’s fuzzy matching code, but don’t hold your breath. 😉 If I do get around to implementing something like that, I figure there should also be a configuration setting for this fuzzy-mode where you don’t have to press colon first. This sounds like a wasteful duplication of Fuzzy Window Switcher itself, but my thoughts are that if the text input is merely one character, no fuzzy matching would occur and instead it would just be treated as a window identifier. Theoretically I suppose you could also use such functionality to introduce double-character identifiers, easily quadrupling the amount of potential options.
Quadrupling, you ask? The current amount of identifiers is a little more than 90, so you would expect to easily get over 8,000 unique identifiers out of it. However, for usability purposes aa would is much faster than aA, let alone a0. Besides, who could possibly keep so many windows straight?
I hope someone besides me finds this useful. Enjoy!