Solving the real Alt-Tab problem

In his latest blog post, Aza Raskin – interface design guru, creative lead on Firefox, and son of one of my heroes, Jef Raskin – tackles one of my oldest bugbears, Alt-Tab. Aza is a clever guy, but I was disappointed that his post addressed an issue I don’t perceive as important, while failing to address what I see as the very real problems with Alt-Tab. But let me start with some background.

(I use both Windows and Mac every day, and in this post tend to use Alt-Tab and Cmd-Tab interchangeably.)

(EDIT: I originally gave the window-switching shortcut as Cmd-\ since I use an external keyboard, but I probably confused Mac users who know it as Cmd-~ (tilde). Updated.)

History (something Windows got right)

Windows had Alt-Tab since Windows 1.0, although it was only implemented in its familiar visual form since Windows 3.1 (1992). To this day, I know many people who never use the shortcut, but I personally cannot imagine using a multi-tasking operating system without it.

I found its initial absence on Apple Macs unacceptable. In Mac-based studios during the 90s, I always relied on a third-party extension, Task Switcher, to provide the missing functionality.

When Apple finally introduced native Cmd-Tab (in OS 8.5, I think), they at first got it wrong. It cycled alphabetically through running apps, rather than switching between apps on a most-recently-used (MRU) basis like Windows1, so I had to continue using the extension. They changed it to MRU order in a later OS update. (Thank goodness Microsoft didn’t think to patent it.)

Unfortunately, Macs still suffer from another difference which I’ll come to after the following interlude.

Interlude: Why is most-recently-used (MRU) order better than cycling (and Exposé)?

The first reason is obvious: If Alt-Tab simply cycled through open windows in a fixed sequence (say, alphabetically), it would just require far too much tabbing, on average, to reach the item you wanted.

But Raskin alludes to the more powerful reason: spatial memory. If the shortcut always switches to the most-recently-used (MRU) item, this quickly teaches you to make the switch without thinking or looking at the screen. Spatial memory is awesome because it’s a background faculty, not foreground. Like reaching for your mouse, it does not interrupt your concentration, or where you’re looking on the screen.

This “toggle” behaviour, using a single shortcut key to switch back and forth between two windows only, is worth mentioning as an important feature in itself. It allows the shortcut to be used to compare the contents of two windows, not simply to switch from one to another. (The Undo/Redo shortcut in Photoshop – Cmd-Z for both – also brilliantly uses this principle.)

So, MRU order allows you to switch between two tasks pretty much subconsciously. Personally, I have learned to switch between up to 3 apps without relying on the visual aid (i.e. using spatial memory alone). For switching between more than that I need to look at the interface, but MRU ordering still reduces the number of times I need to Tab.

The trouble with Macs

Cmd-Tab on the Mac works less well than on Windows, due to the Mac’s application-centric model, as opposed to the document-centric model of Windows. In Windows, for example, you can Alt-Tab between two emails, or two browser windows; on the Mac you can’t. To switch between application windows on the Mac you have to use a different shortcut, Cmd-~, which again uses cycling rather than MRU order. On top of that Cmd-Tab on the Mac has the annoying habit of bringing all an application’s windows to the foreground, often covering up the window you were trying to compare against.

I believe window-switching is closer to the mental model of what this shortcut accomplishes. The clue is in the original feature name: “Task Switcher”. It switches between “things I am doing” – I do not care about which applications they happen to be in. So to see it as an “application switcher” is to miss the point.

It’s also my theory that the deficiencies of task-switching on the Mac spurred the development of Exposé, which I consider a sticking-plaster solution. Exposé is nice, but it does not utilise spatial memory – it forces you to look at the interface.

I admit this is debatable: some people (to my amazement) find application switching on the Mac more natural than window-switching on Windows.

The real problem

As more and more applications adopt a tabbed workspace, Alt-Tab is becoming less useful regardless of which operating system you use. And this is especially serious with browsers, because more and more of our daily tasks happen in browsers nowadays. You’re no longer just “browsing”. Just as often you’re composing documents, managing your calendar, filing bug reports, etc. I often find myself automatically attempting to Alt-Tab between two things I’m doing, but failing because they happen to be in two separate Firefox tabs. And then I have to use the mouse.

In Windows I can improve the situation slightly by opening more browser windows. That way I can use a single window, say, for Google Calendar, one for GMail, one for the blog post I’m writing, a multi-tab one with lots of things I’m reading, etc. On OS X I can’t, since application windows can only be cycled through using Cmd-(Shift)-~.

The keyboard shortcut for switching tabs is usually Ctrl-Tab (on both Mac and Windows), but again, this cycles rather than using MRU. Interestingly, there are a few applications who opted to use MRU with Ctrl-Tab, e.g. oXygen (my favourite HTML editor.) I appreciate it enormously when using the application. Weirdly, Firefox occasionally seems to do this (uses MRU rather than cycling), but this is unreliable and I cannot get it to do so now.

Aza Raskin’s proposal

I’m disappointed that Raskin – evidently a lifelong Mac user – implicitly accepts “application-switching” as the point of the shortcut. As I have tried to explain above, this is fundamentally less useful than task-switching.

In his article he attempts to come up with an improvement to the shortcomings of MRU. (He doesn’t even mention cycling so I assume he is not in favour of it.) MRU’s shortcoming, Raskin says, is that it is only useful for toggling between two things (he says apps, I’d say windows), and frustrates your tendency to form spatial memory habits for more than that. Personally I don’t experience the problem he describes with juggling 3 apps. It’s hard-wired in my spatial memory that Cmd-Tab switches to the last thing, and Cmd-Tab-Tab switches to the last-but-one. For more than this I need to shift my attention to the switcher interface, and spatial memory is no longer of help. But this is infrequent enough not to matter.

He then proposes a “habit-respecting MRU” (HRMRU) to solve this problem I don’t perceive. He ponders using heuristics or even a Markov model to detect users’ habits. Personally I see this failing for the very reasons he himself described – it would just result in a seemingly capricious interface.

But the bigger problem I have with Raskin’s article is that he doesn’t address the real erosion in the usefulness of this shortcut: The loss of MRU due to tabs, and the co-existence of both MRU-ordered switching and cycling. (And the greater problem on Mac OS by having 3 switching modes: Apps, windows and tabs, two of which don’t use MRU.)

My proposal

Tabbed interfaces are not going away. They’re a necessary way of managing the ever-increasing number of windows we have to juggle. If I had to Alt-Tab between all of them, it could number over a 100. So I think two switching modes are inevitable.

So I propose that only two shortcuts are necessary: Alt-Tab / Cmd-Tab for window-switching, and Ctrl-Tab for tab-switching inside a window. (Or document-switching in applications that don’t use tabs.) Both should work exactly the same way: MRU order, with the addition of Shift to reverse the order. There is no reason for application-switching to exist.

This would be a minor change on Windows, but a fundamental one on the Mac. Perhaps, as OS X insists on having 3 switching modes with 3 different shortcut keys, they could at least redefine the second one – Cmd-~ – to be window-switching across all apps (i.e. like Windows) rather than within the current app only. And all should use MRU.

Some people may find MRU order in a tabbed interface confusing, and crave a keyboard shortcut that cycles instead, but then a different application-specific shortcut could always be provided. E.g. Firefox already has Cmd-Alt-Left/Right arrow (Mac) or Ctrl-PgUp/PgDn (Windows). These are more appropriate shortcuts for cycling as their names imply directionality.

  1. Windows actually uses Z-Order, but in practice this generally works like MRU. The behaviour was slightly changed in Vista, but the 6 most recent windows still uses MRU order.

19 thoughts on “Solving the real Alt-Tab problem

  1. karl

    Having recently begun to work in a mac environment, this strikes a huge chord with me.

    Francois, didn’t you install Ubuntu on one of your machines? How does that handle task / window switching?

  2. Francois Jordaan Post author

    I still haven’t gotten round to putting Ubuntu on the kitchen laptop. This is a good example of why I should. I’d love to know whether Ubuntu does any of these things differently.

  3. requires

    “So I propose that only two shortcuts are necessary: Alt-Tab / Cmd-Tab for window-switching, and Ctrl-Tab for tab-switching inside a window”

    That’s how it works in Linux since forever.

  4. Francois Jordaan Post author

    Like Windows, then. That’s good. I presume Ctrl-Tab also works like Windows, though, using sequential rather than most-recently-used order? I’d like that to change.

  5. tshirtman

    As a linux user, having being using gnome (window manager in ubuntu) and some other WM, i have way more shortcut to switch between apps or windows…

    In gnome with compiz, I have shortcut to go to any of the 8 first desktops (with alt-x for 1<x<8), plus alt-tab (wich works a lot like in windows, except for some apps like gimp), plus i can use tabbed navigation in firefox (with ctrl-tab or ctrl+n or with vimperator, use g+n to go to tab n), and I can use window tabs (compiz extension, two or more apps can have the same window, and you change by turning it like a card, except it has more than two faces).

    In more nerdy apps (like Vim, my favorite editor) I have tabs as well as splited windows, with their own different keybinding, and i can embed this in Gnu/Screen, wich is a terminal multiplexer, which is somewhat like a WM for terminal apps, that you can use on a remote server as well as on your destop, again, it has it's own switching keybindings….

    but that was only in gnome, which is not the most efficient way to manage your windows, (but it's nice, on the other hand). On my eeepc, where i lack place and want to manage them efficiently, i use wmii (ok, nerdy, and ugly as hell), which is where i got the idea for alt+n to switch desktop, and have it's own load of keybinding to switch easily between a load of placement of windows. My head is currenlty full of keybings I think, but i can compose workflow depending on the situation, and be very productive :).

  6. Marius Gedminas

    I like the Linux convention of Alt-1,2,3 for switching between tabs. This lets me cycle between the two or three tabs I’m working with in a rather similar way to Alt-Tab: hold down alt with one finger, switch between the two number keys with another two.

    I believe the corresponding Windows convention is Ctrl-1,2,3. I don’t know about Macs.

  7. Frank Wales

    What Francois said; I’m still tripping up over the Cmd-Tab behaviour, expecting Alt-Tab behaviour.

    As a matter of interest, how standardized is the Cmd-Shift-{ Cmd-Shift-} pairing to navigate between tabs? It works in Firefox, although I learned it for Terminal.app.

    (Also, if you’re looking for more suggestions on fixing the Mac interface, I’d like the menu bar to be available at the top of the display where my pointer is, and a smoother way to get keyboard shortcuts for menu items. Kthxbai.)

  8. Matthew

    I can see that tab-switching should have a standard shortcut (perhaps through OS-level integration), but it sounds to me like you’re proposing a solution that just kicks the problem down the road. Not to mention it deprecates one type of application switching only to replace it with another.

    Take Mac OS. You have applications, which consist of a set of windows. You have one shortcut (Alt-Tab) for switching between applications, and another for switching between windows (Alt-\). Now consider your browser-heavy user who separates their contexts to various browser windows. You’re proposing that you have a shortcut to switch between browser windows (analogous to applications in Mac OS) and another to switch between tabs (analogous to windows in Mac OS).

    I understand that Alt-Tab would be overloaded to switch between windows in multi-window applications, but now you’re mixing context types into one big window-tab mess. You still have to get the right window, then switch to the right tab within that window, just as you have to do with windows on Mac OS.

    On Ubuntu, you can, if you’re willing to dig, get something in between Windows and Mac OS. You can switch between windows like Windows with one shortcut, and then switch between windows associated with the current application with another. This is useful for jumping to _any_ terminal, then cycling through the others to find the particular one you want. You can also enable an Expose-style feature, and a Spaces-style feature that gives you entire sets of application windows to switch between.

    The biggest problem I have with the Windows-style context switcher is that in large window lists, you have to press tab quite a bit. The way I work, if I used Windows primarily, my window list would be 9 – 10 items long on average. On the Mac, I could choose an application (~5 items), then choose from a small set of windows to bring forward. I miss that a bit on my Ubuntu system.

    The *real* problem with Alt-tab is that it’s necessary at all. Wouldn’t it be nice if your OS could automagically arrange and display the information you needed for a given task without all of this mucking about with window lists?

  9. Milan

    I like fixed cycling, as far as I am concerned everybody are free to do whatever improvements they think are doing as long as there is the option to disable it. I am fine with just Alt+Tab and Ctrl+Tab, and I also don’t like what firefox do with new tabs now, like how do I catch em and where did that tab just gone, likely there is an option… It seems that everybody now thinks that different is inovative, see ubuntu for example ;)

  10. Florian Schulze

    Try Witch: http://manytricks.com/witch/ it has many options and in it’s latest version can finally replace cmd-tab. I actually don’t use it myself, but I think it solves your particular problem with the right settings.

  11. Michael Foord

    Hmm… as a windows to Mac refugee I find having separate hotkeys for switching between applications and switching between windows within an application *really* useful. It became very quickly embedded in my muscle memory. I used to find tabbing between umpteen docs open in the same app really dull in Windows.

    Some tabbed apps (like opera) also allow you to use alt-tab to “tab” between tabs.

  12. tshirtman

    “The *real* problem with Alt-tab is that it’s necessary at all. Wouldn’t it be nice if your OS could automagically arrange and display the information you needed for a given task without all of this mucking about with window lists?”

    you should really try a tiling WM, like wmii :]

  13. Martin Marcher

    @tshirtman: Yes a tiling WM is nice to _display_ information. However without human intervention (read Mouse Movement, Shortcut,…) it still won’t focus the correct application…

  14. Francois Jordaan Post author

    In my post I tried to prove these 4 things:

    1. Alt-Tab (i.e. a keyboard shortcut to switch windows) is a Good Thing (for that subset of users who know of it)

    2. MRU is better than sequential cycling, because it reduces tabbing and uses spatial memory to avoid breaking concentration, at least some of the time. (I’ll grant Aza that MRU could be improved.)

    3. It’s a Bad Thing that some windows can be Alt-Tabbed between, and others can’t, simply because they happen to be windows of the same app (Mac), or in tabs (all)

    4. A single shortcut key is insufficient, but I believe only 2 is needed (windows and tabs), and *both* should use MRU.

    I agree with Aza that MRU window-switchers present a barrier to new users. But I’m more concerned with those of us who *already* use the shortcut, but find it becoming less useful, or inconsistently implemented.

    Tiling windows (like Exposé) can be useful, but they solve a different problem IMO. They help to find the right window amongst many, but that is a foreground task that interrupts what you’re doing. I’d still want a keyboard shortcut to switch between most-recent tasks without thinking. This will be necessary until we all have big enough displays to keep all tasks visible at all times.

    The two MRU shortcut keys can be supported by additional keyboard shortcuts that use sequential cycling (e.g. Cmd-Shift-Left/Right) or random-access (e.g. Alt-1,2,3) — both already implemented in Firefox.

  15. tshirtman

    @Martin Marcher: you expect the computer to read your mind to know what are the right things to display?

    @François Jordan: Exposé is a temporary tiling (and waste some place, so not a very good one), a Tiling WM is always like this, you just move whe windows to decide where they are, but one is never (ok you CAN do it if you need) behind another. and all your screen is always filled with apps, be it one or many.

    I think more different shortcut mean less key hit for any app, just create your workflow so all switch are natural. But i speak for a very small subset, of the small subset which knows alt-tab…

  16. Owen Blacker

    One of the things I was quite impressed by with IE8 is that it treats multiple tabs as documents (like Word does) rather than tabs within one window (like Firefox does).

    Unfortunately, it only does this in Windows 7 (and presumably Vista)’s taskbar menu thingies, and not in Alt-Tabbing, which is frustrating.

    On the flip side, it’s good that Chrome doesn’t do this, or I’d be looking at several dozen “documents” in Chrome ;o)

  17. vianney

    François: try out Tab Mix Plus for firefox. It’s the first addon I ever install along with Adblock, and probably the main reason I’m still not switching to Chrome (no MRU, no addon for MRU).

    Regarding Linux and ‘this is how linux has always worked blablabla’, well no it’s not. Ctrl-Tab is controled by the applications, not Linux, and I have plenty that don’t do MRU – again, baseline Firefox, Chrome, IDEA, for instance). Also, I can’t seem to find a way to setup alt-tab-shift on Ubuntu, it’s certainly not working on a default install.
    And alt+n is precisely (part of) what François is arguing against, since it requires you to think and remember the current position of every ‘tab’ or ‘window’ in the space, for a setup that is the same every day why not (you have time to train your muscle memory) but for task switching?

  18. vianney

    correction: there are add-ons for MRU on chrome but not very functional due to the limitations of its API.

Comments are closed.