Keybinding Design, Fast-Repeat Commands

By Xah Lee. Date: . Last updated: .

This page discuss one criterion on the design of keyboard shortcut system: Fast-repeat vs Non-fast-repeat Commands and Keys. This is for designing keybinding for any app that has a hundred commands, such as emacs, vi, 3D modeler, games.

Fast-repeat and Non-fast-repeat Commands

in my keyboarding research, there's a important discovery. Commands can be classified into 2 types:

Fast-repeat commands
Commands that are often repeatedly called within a second. For example, moving cursor by character/word, delete by character/word, page up/down, switch to prev/next tab or window, undo, redo, increase/decrease font size, zoom in/out, close tab. Typically you hold down a key to repeat the command many times.
Non-repeat commands
Commands that don't make sense to repeat. Vast majority of commands are this type. For example, copy, cut, open file, start find text, show help, open folder, launch browser, launch any app, start terminal, turn on bluetooth, start playing video, pause video, next song, etc. Emacs examples: describe-function, list-matching-lines, sort-lines, kill-buffer, switch-to-buffer, dired, etc.

Fast-Repeat Need Repeatable Key Shortcuts

Fast-repeat Commands must have keys that can be held down. Here are some examples of fast-repeat hotkeys: F8tPageDownCtrl+tCtrl+Alt+8.

Non-fast-repeat hotkeys are basically keys that involves a sequence: Ctrl+x 2F8 F9.

So, when designing a keybinding system, one of the principle is for fast-repeat commands be on fast-repeat keys, else it's a waste. (because you only have a few precious easy-to-press key spots, yet you have hundreds commands.)

In GNU Emacs's default keybinding, there are many such wastes. For example, all Ctrl+number and Alt+number are bound to digit-argument. The digit-argument is a non-repeat command, yet it sits on 20 EASY repeatable keys. (further, digit-argument isn't a frequently needed command, with respect to all commands and the relatively few easy-key-spots.)

Another bad example is forward-pageCtrl+x ]】. forward-page is a fast-repeat command, but it doesn't have a repeating key. Imagine, if every time you need to PageDown that you have to press Ctrl+x first. You couldn't just hold it down. Another example is next-buffer with key Ctrl+x .

But remember, this “Fast-repeat and Non-fast-repeat key” is only a supporting criterion in keybinding design. It is not the most important criterion. The single most important criterion in designing a keybinding system is that most frequently used commands be mapped to the most easy-to-press keys. See: Keyboard Shortcut vs Launch Buttons .

See also: Emacs: Xah Fly Keys

back to Keybinding Design ⌨

Keybinding and Input-System