Search Results for 'superswitcher' ↓

So Long, and Thanks For the Super Switching

Some years ago, I wrote (and blogged about) a window switching utility, an Alt-Tab replacement called SuperSwitcher.

Given the trend in Linux UIs like GNOME3 and Unity, I went all in and wrote my own window manager instead, in the Go programming languageTaowm is The Acutely Opinionated Window Manager. It is a minimalist, keyboard driven, low distraction, tiling window manager for someone who uses a computer primarily to run just two GUI programs: a web browser and a terminal emulator.

SuperSwitcher no longer scratches an itch I have, and I haven’t made any substantive code changes in years. The truth is that SuperSwitcher is probably a dead project. In 2010, I said that I’d make a 1.0 release for Ubuntu 10.04 LTS, and I never got around to doing that, but nobody really complained to me about it either.

This blog also isn’t showing much signs of life. If you care, follow me on Google+ instead.


The Road to One Point Zerodom

A comment on my previous blog post asks, “when are you going to release a new version of Superswitcher?” For those who don’t know, superswitcher is my window management utility that aims to be a compelling replacement for Alt-Tab.

It’s true that I haven’t made a release in years, and known crashers have been fixed since then. Yes, I’ve been lazy. Let’s fix that. Specifically, I aim to do a superswitcher release for the upcoming Ubuntu 10.04 LTS release (Lucid).

Since there’s been no feature changes in more than two years, let’s call this the 1.0 release. There remains a number of open bugs, but in my experience it’s pretty stable. Calling it 1.0 brings a few points into focus:

First, superswitcher theoretically builds on GTK+ 2.6, libwnck 2.10, and XFree86 (not just, but I’d be surprised if people are still running 2005-era distributions. I’d like to modernize the dependencies to what ships on Lucid — the less #ifdef’s in the code, the better.

Second, compiz has never really got on well with superswitcher. I agree with Havoc Pennington that “it’s a total PITA for apps and pagers if there are two ways to implement workspaces“. I’d started compiz support, but superswitcher-on-compiz is still not really usable, it crashes more often, the code became more complicated, and fundamentally, I personally don’t have an itch to scratch (I like my Cheerios window manager) and nobody’s sending patches. I’m therefore aiming to not support compiz at all (rather than “support” it badly) for superswitcher 1.0.

Third, there is currently a runtime flag for experimental “live window thumbnails”. This might become a compile-time option, but I doubt that I’ll ever finish it, so I’m tempted to remove this entirely too. Again it’s buggy (it doesn’t show thumbnails for windows on other workspaces), my unscientific feeling is that it’s noticably slower to paint, and it isn’t really helpful (visually) unless the thumbnails are so large that the layout is kind of ugly. I’m also not fully confident with how XComposite, XDamage, and XRender are all supposed to work without causing X errors, and comments in the metacity source suggest that I’m not alone.

People have asked about moving superswitcher’s features into metacity (GNOME’s default window manager). The metacity maintainers are certainly aware of superswitcher, but feel that it should remain a separate program, just like Devil’s Pie, which is fair enough. Maybe I’ll write my own window manager one day, but that’s another story for another time.

So, dear superswitcher users, any comments?

Look, Mum. Fans!

Some stranger (and former Ion-head) called Sean has nice words to say about Superswitcher, saving him the effort of writing his own “go to window by name” program. Superswitcher wasn’t actually “designed as the ideal test case for libwnck”, but it certainly does give the Window Navigator Construction Kit a workout.

When a Switch is On, It’s On

I’ve just rolled version 0.6 of Superswitcher – a compelling replacement for Alt-Tab.

You can find the download links (source tarball, or Ubuntu .deb packages) off the project homepage. Tijl Van den Broeck has kindly put together an amd64.deb, for those who swing that way. I haven’t tried it myself, but I’m sure that it’s absolutely frabjous.

The key change since 0.5 is the ever-so-subtle but “forehead slapping, why didn’t I think of that” handy feature of not crashing immediately on Ubuntu Gutsy 7.10. There was an libwnck API/ABI change (in the active_window_changed signal handler), as unstable libraries sometimes do, somewhere on the journey from Feisty 7.04.  This API/ABI change broke 0.5-era superswitcher binaries, but as far as I can tell, it’s all peachy again with the latest and greatest.

There’s also window previews (a.k.a. thumbnailing), but this is highly experimental – they’ll need to invent letters that come before alpha to describe this one. I’ve seen a thumbnail-enabled Superswitcher crash whilst playing with Compiz, but I haven’t been able to reproduce this reliably.

Even without blingy thumbnails, Superswitcher and Compiz haven’t really played nicely together in the past. Prior to Gutsy, I haven’t actually used Compiz as my day-to-day window manager, since I’m a grumpy old bastard who thinks, “Ugh, hard-to-read text” when presented with a semi-transparent window. But with Compiz now part of the Ubuntu out-of-the-box experience, Superswitcher’s compatibility will probably see some attention soon. You’ll read about it here first. Unless, of course, you send me a patch instead. Yes, you.

P1mp My Switcher

Thanks to John Stowers’ link drop (and his offhand remark that someone could "use this as the basis for window previews in libwnck") and a rainy Sunday, I’ve now added some XComposite / XRender blingfactor to SuperSwitcher (yeah, SS first, maybe libwnck later, once I actually understand how all this X voodoo works). In a word, thumbnails:


Compare that to the version 0.1 screenshot:

It’s (more than) a little buggy at the moment (e.g. it doesn’t show minimized windows’ contents, or those from different workspaces, and it doesn’t speak XDamage events), but if you want to play with it, the code has just hit the SVN repo.

If you don’t recognize the video playing in MPlayer, then get your eyes onto some sweet, sweet Chaser.

Hello, World

I mean, g’day Planet.

Hi. I’m Nigel Tao. You might know me from such GNOMEly things as:

I would like to echo Prashanth Mohan’s recommendation of Rob Pike’s Newsqueak talk (and the elegance of the Sieve of Eratosthenes program). Also, there are many more Google Tech Talks, where all sorts of interesting (and not so interesting) technical people drop by Google HQ and, uh, talk. For example, Aza Raskin of Humanized gave one recently titled Away with Applications: The Death of the Desktop demonstrating Enso (which I’ve previously mentioned).

Warning: this paragraph of interest to programming language buffs only :-). In Newsqueak, variable declaration looks like i: int (compared to C’s int i), and assignment is the bog-standard (although mathematically lax) i = i + 1. One cute little syntactical feature is that you can combine declaration and assignment to write i := 42 to (loosely speaking) be a short-hand equivalent to i: typeof(42); i = 42, sort of like how i += 1 is short-hand for i = i + 1. It looks like Pascal’s old-school assignment operator, but it is in fact two separate operators, and you can even put whitespace in between to get i: =42.

Finally (in the small print section), these posts are entirely my own personal opinions and do not necessarily represent the views of my employer, blah blah blah, yadda yadda yadda.

Shameless Plug (of a Memory Leak)

Superswitcher version 0.5 is out.

  • Plugged a memory leak. Previously, we were not destroying cairo contexts.
  • First draft of a D-Bus interface.
  • New add and remove workspace buttons.
  • Respects #define MAX_REASONABLE_WORKSPACES 36 as per metacity.
  • –trigger-on-caps-lock split into –also-trigger… and –only-trigger…

The memory leak turned out to be that I wrote gdk_cairo_create without having a corresponding cairo_destroy. You’d think compilers these days should be able to pick up an error like that. C++ has ‘smart pointers’ and destructors, but hot damn is it ugly. Garbage collected languages take away the problem of explicit memory management, but can be sluggish (yeah, yeah, it’s debatable), which might be quite important if you’re on limited resources.

I like C. I get it, and as far as software goes, it’s small and simple enough that I think I get all of it. I can read C, and I can understand what’s happening. Compare this to C++, where overloading and operators and multiple inheritance and references instead of pointers means that when you get an obscure bug, it hurts. Even when you have a simple bug, the compiler error messages are horrendous to get your head around. Apparently there’s a new C++ standard (“C++0x”, due Real Not-Soon Now) brewing that will ‘fix’ some of these problems, but I expect it to suck because they’re adding more things rather than taking stuff out. To mix metaphors, you can’t polish a backwards compatibility crutch.

Java and Python are (relatively) easy to write in, but for serious stuff, you have to “learn the architecture of the machine”, so says Samba guru Jeremy Allison. You gotta understand pointers, and that something is slow because you’re copying lots of char arrays in a dumb way. Having read what I just wrote, I am turning into such an old fart, but then again, I’m like 48 in computer years.

What I really want is a programming language that reads like Python and runs like C. That should be its mission statement: reads like Python, runs like C. Maybe I should enrol in a research degree, spend a few years inventing Yet Another Best Programming Language Ever, and whinge that nobody uses it even though it is the Best Programming Language Ever. If I do, you’ll surely hear about it. In the meantime, enjoy a less leaky window switcher.

Closing thought: what’s the biggest memory leak anyone’s ever seen? This fuzzy screenshot shows Firefox clocking over 1.5GB…

Been There, Done That, Got Loads of Free T-Shirts was pretty cool – there were OLPCs to play with, faces put with names (and nicks), an awesome Open Day full of shiny demos, and a luncheon pilgrimage to the Red Hat Noodle Bar.

I gave a talk about superswitcher at the GNOME miniconf. It wasn’t the sexiest topic, and I was a little nervous (I haven’t really done a lot of presenting before), but I don’t think it sucked. It was a better experience than one I had a few years ago, when it was really cold, and my hands were stiff and frozen just before I had to get up on stage, so I thought to run some warm water over my hands, only to turn the tap on far too fast, and the splash gave me a nice big wet patch right over my groin :-). Unfortunately, the video appears to be lost. There are OGGs of Davyd’s introduction and t-shirt handing out (trust me, it’s not that interesting) beforehand, and the Avahi talk afterwards, but not the one of me. So much for my 15 minutes of fame, but really, there wasn’t a lot to it (if you want to find out what superswitcher does, just download and try it). At least Davyd took a photo.

Anyway, I talked a little bit about the wnck library, and if you want to start playing around with that, then I have some wnck python example programs that are pretty short and simple. Another example I gave is how easy a (Python) D-Bus program can be. Here’s a 4-liner that tickles superswitcher (yeah, you will need a version after 0.4):

#!/usr/bin/env python
import dbus

Finally, Enso was just released, albeit Windows-only and trial-ware (yeah, they gotta eat). From my biased viewpoint, it looks sort of Deskbarish (they mention Python plug-ins!), sort of Superswitcherish (they switch windows by find-as-you-type title search, and they trigger on Caps Lock!), sort of Quicksilverish (Santa is still yet to gift me a BlingBook Pro), sort of Google Desktop Ctrl-Ctrl-ish, surely sort of other things I haven’t seen yet, and heavily influenced by the late Jef Raskin’s The Humane Interface (certainly interesting reading for UI designer wannabes, especially those who want to get away from the “nothing’s changed since the 90s, overlapping windows, files and folders, icons on a desktop” rut). The Flash demos are all very flash :-), although I don’t really see the life-changing-ness of being able to calculate anywhere (maybe I just wasn’t cut out to be an accountant). The “learn as” feature seems nifty at first glance (although if it’s just files or URLs, you could simply just bookmark them in Nautilus or Epiphany and pick them up in the Deskbar).

Update (2007-01-29): Terry didn’t win, by the way, but he still made the news. Apparently he “is a true-blue Australian with a fondness for meat pies, football, cricket, and our easygoing, honest, and relaxed culture”, despite me being unable to remember the last time he ate a meat pie, watched the footy, or the cricket. He is, however, easygoing, honest and relaxed.


It’s nowhere near “release early, release often”, but superswitcher 0.4 is finally out. The project is now hosted on Google Code, which means a subversion repository, an issue (bug) tracker, an one-stop download shop and probably more to come.

You can now also download a i386.deb binary package directly, rather than just the source tarball. This is the first time that I’ve rolled a .deb, so feedback is most welcome.

One new feature I’d like to highlight is the ability to use the Caps Lock key to switch windows (WITHOUT HAVING TO TYPE LIKE THIS) instead of the Super key, which is most useful if, for example, your Thinkpad has no Super key, or something like compiz wants the Super key. This promotes the larger-than-average Caps Lock key from my most hated wart on the keyboard to one of the most cherished keys. Hooray for the poor neglected Caps Lock.

Changes since 0.3:

  • Can now drag-and-drop workspaces.
  • New -c, -v and -? command line options.
    -c or –trigger-on-caps-lock makes Caps Lock also switch windows.
    -v or –version shows the version number and exits.
    -? or –help shows a brief instruction guide.
  • Super-Shift-Control-Insert now moves *all* windows from this workspace to a new workspace, so as to be consistent with Shift = Move, Control = Move-All-Windows-in-this-Workspace and Insert = New-Workspace.
  • Now does window-frame geometry calculations “the right way”, via a window’s _NET_FRAME_EXTENTS X property, rather than presuming that its frame is the same as its parent X window.
  • Now warps the pointer to the activated window’s center, under focus-follows-mouse in metacity. This fixes the behavior where window activation would be ‘stolen’ by whatever window was under where the pointer was at the time.
  • Now works when NumLock is on. Fixes bug #1.

Get it fresh from the superswitcher project page. Its page is still updated but is no longer definitive.

Thanks to Drew Kerr for his help.

OK, back to Kerry O’Keeffe calling the cricket…


It’s been a quite a few months where nothing happened with superswitcher (or actually anything at all from me on the OSS front), but my eleventy-half loyal users will be happy to know that it now has a subversion repository and issue/bug tracker, thanks to Already, a bug (Doesn’t work when Num-Lock is on) has been filed and the one-liner fix has been committed.

Ah baby steps, back on the path to world domination. Now to contemplate my massive deskbar to-do (or at least, to-look-at) backlog…