January 27, 2021

Introducing Tap Dance

by Erez Zukerman

It’s been a while since I was this excited about a new feature: My Up arrow now has superpowers! When I press it once, it sends Up; when I press twice, it becomes Page Up. If I hold it, it’s a Volume Up, and if I press, then hold — it activates the browser’s address bar (which is at the top part of the window, hence, “up”).

Four actions, one key. My Down, Right, and Left arrows are similarly powerful, as are some of the keys right under my fingers on the home row. And all of this is in addition to layers, and can work on any layer, across all of our keyboards.

It’s called Tap Dance:

Tap Dance

Tap Dance isn’t a new feature in QMK. The firmware side of it is documented here. It is, however, new to Oryx. That makes it much easier to use — easy enough that my own layout is now full of tap-dance keys.

Just to give you a sense of what can be done with Tap Dance, I’d like to share some of the uses I’ve discovered while testing the feature on my own layout. I’m sure you can come up with lots of other ideas for your own uses.

Tap Dance on its own

  • Single-key copy, cut, and paste: My X, C, and V keys now do double-duty as cut, copy, and paste — no modifiers needed. I simply hold the key for a moment, and it does its thing. I got quite quick at this after a while.
  • Cursor control: I mentioned my Up arrow at the top of this post; my Down arrow also sends Down when tapped once, and Page Down when tapped twice. My Left and Right arrows start skipping whole words backwards and forwards when I press and hold them. This also works while holding down Shift, making it easy to select entire words when editing text.
  • Media control: My Up and Down keys, when held, control Volume. My Tab key sends Play/Pause when held.
  • Window control:

    • New tab: When I hold down my T key, it pops up a new tab in whatever browser or application I’m using (sends Cmd + T).
    • Next/previous tab: Double-tapping my Left arrow key moves to the previous tab; double-tapping my Right arrow moves to the next one.
    • Close window: Holding W for a moment closes the current window (sends Cmd + W).
    • Quit application: Holding Q for a moment quits the current application (sends Cmd + Q).
  • Single-key Alfred: Holding M for a moment pops open Alfred (sends Cmd + Space which is my Alfred shortcut).

Tap Dance combined with software

I recently started using Keyboard Maestro, a powerful automation tool for macOS. If you’re using Windows, you can use something like AutoHotkey for similar effects.

Combining Tap Dance with an automation tool like this allows for single-key access to any application on your machine, for example. If I hit my = key, I get an Equal sign. But if I hold it, Obsidian, a personal knowledge management tool I use often, pops open.

I have a key that lets me quickly call up either of the two messaging apps I use all day long — I hold it to call up WhatsApp, and double-tap it for Telegram. It’s my “messenger” key.

These are basic examples. With time, I’m sure I could get fancier — but I’m just getting started.

Take it slow: Tap Dance is (muscle) memory intensive

While our keyboards can handle lots of Tap Dance keys, our minds may need some time to adjust. I found that it’s quite easy to go overboard with Tap Dance, setting up lots of keys and thoroughly confusing myself.

Instead, I am taking things just a few keys at a time. First I modified my Arrow keys and made sure that works for me, and that I really do use their newfound powers to get actual work done. Once I became used to it, I moved to the next thing. There are still ideas I’m waiting to implement: Double-tapping my Z key to undo (double-tap for Undo), for example. Or pressing and holding my Backspace key to delete entire words backwards. All in good time — I’m letting myself grow into the feature.

There are two types of muscle memory to develop here: One for the actual shortcut (which key does what), and another for the timings (what counts as a hold, what’s quick enough to be a “double tap”). The latter one is called Tapping Term, and you can configure it under the Tapping section of Advanced Settings:

Tapping Term

What’s coming: Layer changes and Live Training

As implemented in QMK, Tap Dance also allows you to switch between layers (either momentarily while holding down the key, or as a toggle). This is something we’re saving for a future date: We wanted to start with a simpler version of Tap Dance first.

Another feature we’re planning is a custom Live Training mode for Tap Dance, based on the action you list for a given “dance”. So rather than ask you to “Produce Cmd+Shift+Alt+Ctrl F12 using Tap Dance”, Live Training will ask you to press whatever you need to “activate Firefox” (the description you provided when setting up the key). This way you’ll be able to practice all of your Tap Dance combos in one place. Stay tuned for that one.

Tap Don’ts: Various gotchas

With great power come great… trade-offs, of course. Isn’t that how it goes? Here are a few of the notable ones:

Key repeat

Let’s say you bind your Up key using Tap Dance, and then you try to navigate a text document by hitting Up-Up-Up-Up in rapid succession. This will work, but it will wait until your third or fourth tap to get going. This is because the keyboard needs to make sure you’re not trying to double-tap.

AutoShift

If you’re using AutoShift on your alphanumeric keys, Tap Dance will take precedence. So AutoShift will “stop working” for those keys you’ve set Tap Dance for.

Macros

Tap Dance can’t run macros, at least in Oryx. The UI is just too complicated, for now.

International keycodes

Just like macros, Tap Dance doesn’t support international keycodes directly: The keys are all en-US. You can work around this by specifying the en-US keycode that matches whatever you’re trying to print out in your own input locale, but that requires some mental gymnastics. In other words, you won’t find French ù on the list, for example, but you can still get an ù by sending a single quote instead (which is the key you’d have to tap on an American hardware keyboard, when plugged into a French-speaking computer).

Your turn!

I’m just getting started with Tap Dance, and I’m sure I have a lot to learn. Teach me! Please make something and then ping contact@zsa.io with your layout to show what you’ve created. I’d love to feature your work in an upcoming newsletter!

Erez Zukerman

Erez Zukerman

Erez Zukerman is the CEO and Co-Founder of ZSA Technology labs.