History of Key Shortcuts: Emacs, vim, WASD, Etc

By Xah Lee. Date: . Last updated: .

Keyboard Influence on Key Shortcut Design

In my study of keyboarding in the past 20 years, i've noticed that the choices of many shortcuts in many apps are adopted to the many aspects of the keyboard hardware of the time in use by the community. Emacs's keybinding is not simply based on the first letter of commands, but the QWERTY layout's key positions have significant influence on it. This also applies to the letter choice of unix's shell commands. Much of this influences of design are unconscious.

Emacs's Meta and Control

As a example, emacs's Meta key, and heavy use of Ctrl as primary modifier, and avoiding any Ctrl+Shift+letter in its keyboard shortcuts, are caused by the lisp keyboard hardware and dumb terminals of 1980s. [see A Curious Look at Emacs's One Thousand Keybindings]

Symbolics's Lisp Machine keyboard PN 365407 Rev C. (Photo by Joey Devilla [https://www.globalnerdy.com/2009/02/05/hacklabtos-lisp-machine-keyboard/] , Used with permission.)

[see Lisp Machine Keyboards ⌨]

How did emacs's cursor movement keys {C-n, C-p, C-f, C-b} came about?

… At the time [1976] Guy Steele put together the Emacs default key mappings, many people in the target user community (about 20 people at MIT!) were already using these key bindings. It would have been hard to get the new Emacs bindings accepted by the community if they differed for such basic commands. As you point out, anyone using Emacs can very easily change this based on their own ergonomic preferences.

[see Daniel Weinreb on Emacs Keybinding]

Why emacs doesn't have any Control+Shift+letter key?

Because, in terminal, Control+Shift+letter has the same signal as Control+letter.

See also:

History of vi Keys

Terminal Keys

Many of the text terminal keys in Linux we are familiar today, are not keyboard shortcuts or keybindings proper. They are simply input method for ASCII control characters. [see ASCII Characters]

For example, Ctrl+d exits the terminal, but only if the cursor is at the beginning of the prompt, because Ctrl+d is actually the input for sending the ASCII Control character “End Of Transmission” . [see Linux: Terminal Control Sequence Keys]

Gamers WASD Keys History

The X C V for Cut Copy Paste

Windows's PrtScn/SysRq for Screenshot


If there's any conclusion, it is that many keyboard shortcut or hotkey choices are based on what is practical at the time. Issues of logical design, ergonomics, consistency, efficiency, are less important. Some of these concept didn't even exist at the time, and some choice was good at the time but computer systems and hardware and keyboard all have changed.

In retrospect, many of the choices are not the best today. For example, QWERTY layout was practical at the time, but the Dvorak Layout was invented too late, when convention was already established, and concept of keyboard ergonomics may not even exist. But typing on computer is done by everyone today, for chatting, emails, all sorts of communication, and programing has become a field that's some million times more than the number of typists 40 years ago.

[see Dvorak Keyboard Layout]

Emacs's primary modifier the Ctrl is much better at the Alt position on today's PC keyboards.

“vi”'s Escape might be better today at PC keyboard's Alt or CapsLock positions. vi's {h j k l} is still pretty good, but {i j k l} is equally efficient but more intuitive. [see Arrow Keys Arrangement Efficiency: vim HJKL vs IJKL]

The way CapsLock work should be deprecated. It should work as a key to capitalize the next letter key press. (not as a “lock”) This way, Shift can be entirely removed.

Any modifier keys such as {Shift, ❖ Window, etc} should be deprecated. Instead, they should just be special keys, as starting key for a key sequence to call commands. (like how Microsoft Windows's Alt key works (from about Windows 95 to Windows 7).) [see Ban Key Chords]

The defunct keys: Insert, PrintScreen, ScrollLock, Pause, Break, really should be gone. [see Print Screen, SysRq, ScrLk, Pause, Break Keys] The NumLock on the number keypad also is a relic, from a time long past that keyboards don't have dedicate arrow keys and Page up/down Home/End etc keys.

Today, there needs to be keys to change sound level, play/pause music, next/previous song. Luckily, these have been on most keyboards since about mid 2000s, just that they have not been standardized in layout. Similarly, there needs keys to launch frequently used apps such as email, web browser. These have also been widely popular in keyboards. There needs to be keys to switch to previous next app/window/tab. Also needed is dedicated keys for {copy, cut, paste, undo, redo}. These are used in about every application on a hourly basis. Major keyboard makers Microsoft and Logitech have started to make keyboards with these functions pre-assigned to the F1 to F12 Function keys. However, it creates problems because these function keys already have uses in many applications, especially for programers. Microsoft also introduced the F-Lock key to toggle the purpose of the F function keys, but that created more problem than is worth. [see The F-Lock Key Problem]

2013-07-17 addendum: Hacker News discussion. https://news.ycombinator.com/item?id=6056420

2013-07-29 thanks to Liam Proven (https://twitter.com/lproven) for correction on Apple keyboard photo used.

2017-05-18 addendum: Hacker News discussion. https://news.ycombinator.com/item?id=14367207

Keybinding and Input-System