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 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.
Window control:
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.
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:
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.
With great power come great… trade-offs, of course. Isn’t that how it goes? Here are a few of the notable ones:
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.
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.
Tap Dance can’t run macros, at least in Oryx. The UI is just too complicated, for now.
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).
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 is the CEO and Co-Founder of ZSA Technology Labs.