Why Emacs's Keyboard Shortcuts are Painful (Version 2011)
This article shows why Emacs's keyboard shortcut set is the worst with respect to ergonomics.
A important aspect in designing a keyboard shortcut set, for a application that has intensive, repetitive, prolonged human-machine interaction (such as coding and text editing), is to consider ergonomic principles. Specifically: the top most frequently used commands should have the most easily-to-press keystrokes. For example, they should be on the home row.
The tragedy of Ctrl/Meta Swap
Emacs's keyboard shortcuts is very inefficient. The primary cause is that emacs's keys are designed with a keyboard that practically has the Ctrl and Alt key positions swapped.
The common keyboard used around emacs era in the 1980s are those keyboards from Lisp Machines. The keyboard on lisp machines have the Ctrl key besides the space bar (similar to the position of Alt keys on PC keyboards), and Meta to the left of Ctrl. So, the Ctrl key is the primary modifier, and the Meta is secondary to Ctrl. This is why, the shortcuts for the most used commands in emacs involve the Ctrl key instead of the Meta key. (Example: The cursor movements: 【Ctrl+p】, 【Ctrl+n】, 【Ctrl+f】, 【Ctrl+b】, 【Ctrl+a】, 【Ctrl+e】, the cut paste undo 【Ctrl+w】, 【Ctrl+y】, 【Ctrl+/】,
Lisp Machine's keyboards died with Lisp Machines. Since the 1990s, the IBM PC keyboard (and its decedents) becomes the most popular and is used by some 98% of personal computers today. The PC keyboard does not have Meta key but have Alt instead. The Alt is placed right beside the space bar, while Ctrl is placed far to the corner.
Emacs did not change its keybindings to adapt the PC keyboard. Emacs simply reassigned its Meta keys to the Alt key and kept on using the terminology Meta. Here's a quote from emacs official doc for version 23.2 (info "(emacs) User Input"):
Emacs also recognizes control characters that are entered using "modifier keys". Two commonly-used modifier keys are <Control> (which is usually labelled as <Ctrl>), and <Meta> (which is usually labeled as <Alt>)(1). For example, `Control-a' is entered by holding down the <Ctrl> key while pressing `a'; we will refer to this as `C-a' for short. Similarly `Meta-a', or `M-a' for short, is entered by holding down the <Alt> key and pressing `a'. (1) We refer to <Alt> as <Meta> for historical reasons.
The tragedy of the Ctrl/(Alt/Meta) swap made emacs keyboard shortcuts very painful, and the frequent need to press the far-away Ctrl key creates the Emacs Pinky syndrome. Many emacs users have injured their hands with emacs, and emacs's Ctrl and Meta combinations are the most cited reasons as the major turnoff to potential users among programers. [see Famous Emacs People With Hand Injuries]
(For photos of several different models of Lisp Machine's keyboards, see: Space-cadet Keyboard and Lisp Machine Keyboards.)
The Choice of Keys
|Keystroke||Emacs Command Name||Standard key|
The shortcut's key choices are primarily based on first letter of the commands, not based on key position and finger strength or ease of pressing the key. For example, the single char cursor moving keys are scattered around the keyboard with positions that are most difficult to press. (these shortcuts all together accounts for 43% of all commands executed by a keyboard shortcut) Of these, the most frequently used is 【Ctrl+n】, which accounts for 20% of all shortcut calls, but is assigned to the letter n, positioned in the middle of the keyboard, which is one of the most costly key to press. Similarly, the second most used among these is the 【Ctrl+p】, accounting for 16% of all shortcut command calls, is located in a position above the right hand's pinky, also one of the most costly key to press. [see Emacs Command Frequency]
(Here we assumes the QWERTY keyboard layout. On the Dvorak layout, it is about as bad.)
The following is a quote from a prominent lisp veteran Daniel Weinreb (
http://danweinreb.org/blog/), who implement the first emacs in lisp EINE:
[• emacs keybinding By Daniel Weinreb. At http://groups.google.com/group/comp.emacs/msg/0342e0bc1aa05c0d , Accessed on 2012-09-08 ]
That's true. At the time 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.
A significant portion of emacs's major shortcuts (those with
【Meta+‹key›】 or 【Ctrl+‹key›】) are mapped to commands that are
almost never used today. Some of these occupy the most
precious space (Home row with thumb, for example: 【Meta+s】
center-line), 【Meta+j】 (
kill-sentence)). Most programer who have used emacs for years never
use these commands.
|【Alt+1】 to 【Alt+9】|
Difficult Keystrokes for Frequently Used Commands
Some commands that are used by every emacs user many times every hour, such as Open, Save, Close, Next Tab (buffer), all require multiple keystrokes with the difficult Ctrl key.
|Standard Name||Emacs Command Name||Keystroke|
|Next Tab||【Ctrl+x →】|
|Previous Tab||【Ctrl+x ←】|
No Use of Shift Key
For historical reasons, emacs does not use any keybindings involving the Shift with a letter. (For example, there's no 【Meta+Shift+a】, or 【Ctrl+Shift+a】) This is so because in early computing environment, 【Ctrl+Shift+letter】 cannot be distinguished from the non-Shift version, due to a practical combination of ASCII, Computer terminal, telnet, and how the keybinding is implemented emacs during this era.
Today, however, employing the Shift key as part of a shortcut with other modifiers is common and convenient. For example, on Mac OS X, Undo and Redo are 【⌘ command+z】 and 【⌘ command+Shift+z】, Save and Save As are 【⌘ command+s】 and 【⌘ command+Shift+s】. On Mac and Windows, moving to next/previous field/window/application often use the Shift key for reversing direction. In text editing on both Mac and Windows, a modifier key with a arrow key will move cursor by word/paragraph, and with Shift down will select them while moving. (Emacs 23 (2009) by default supports Shift-select. See: Emacs 23.1 New Features (released 2009-07).)
Using the Shift as a reverse operation is very easy to remember, and doesn't take another precious shortcut letter. By not using the Shift, commands with a logical reverse operation necessarily have to find other key space, and overall making the shortcut set more difficult to remember, or scattered, or more difficult to press.
A Flaw in Keybinding Policy
Any major software, maintains a guide for the developers about the choices of keyboard shortcuts, so that the shortcuts will be consistent. Emacs has this in its Emacs Lisp manual: Key-Binding-Conventions (info "(elisp) Key Binding Conventions")
This guide, indicates that the only key space reserved for users to define, are the function keys F5 to F9, and key stroke sequence starting with 【Ctrl+c】 followed by a single letter key.
This is a severe restraint to the utility of customized shortcuts. F5 to F9 are only 6 keys. The key sequence starting with 【Ctrl+c】 followed by a letter, is multiple keystrokes and rather a painful choice, and there are only 26 spaces there.
The function keys, F1 to F12, are very good key space for user to define their own shortcuts. The digit key shortcuts, 0 to 9, are also good user space. These keys can be used with any combination of Ctrl, Alt, Shift. For example, a user might define them to insert various templates, headers/footers, a system of customized HTML/XML tags. Or, she might assign them to various special emacs modes such as dired, shell, ftp, email, calendar, calc, *scratch*, make-frame-command (Open a new window), insert signature.
It seems too drastic a policy, to limit user defined keys to only F5 to F9, and key sequence of 【Ctrl+c】 followed by a single letter key.
A more damaging aspect, is that, emacs has developed a convention, such that the shortcuts for each language mode's commands all have this keybinding: 【Ctrl+c Ctrl+‹key›】. This is extremely painful.
Epilogue: Failure to Change
Today, most commonly used keyboard shortcuts have been somewhat informally standardized. For example, Z X C V is for Undo Cut Copy Paste. O is for Open. S is for Save, Shift-S is for Save As. P is for Print. F is for Find/Search. Tab is for next, Shift tab for previous. These are common conventions today in every application across Microsoft Windows, Macintosh, and Linux desktops.
In the early 1990s, DOS era software, each application has its own scheme of shortcuts. The following is a excerpt from the Wikipedia article on Common User Access:
CUA was a detailed specification and set strict rules about how applications should look and function. Its aim was in part to bring about harmony between MS-DOS applications, which until then had implemented totally different user interfaces.
- In WordPerfect, the command to open a file was F7, 3.
- In Lotus 1-2-3, a file was opened with / (to open the menus), W (for Workspace), R (for Retrieve).
- In Microsoft Word, a file was opened with Escape (to open the menus), T (for Transfer), L (for Load).
- In WordStar, it was Ctrl+K+O.
- In Emacs, a file was opened with Ctrl+x followed by Ctrl+f (for find-file).
Some programs used Escape to cancel an action, some used it to complete one; WordPerfect used it to repeat a character. Some programs used End to go to the end of a line, some used it to complete filling in a form. F1 was often help but in WordPerfect that was F3. Ins sometimes toggled between overtype and inserting characters, but some programs used it for “paste”.
Thus, every program had to be learned individually and its complete user interface memorized. It was a sign of expertise to have learned the UIs of dozens of applications, since a novice user facing a new program would find their existing knowledge of a similar application absolutely no use whatsoever.
Commercial software have updated themselves with time (or went extinct), but emacs has not.
If we take a survey of the market share of text editors (including IDEs) among professional programers (as defined by those who make a living by computer programing), then, it is my guess, that emacs from mid 1980s to early 1990s, has more than 50% of market share, but gradually declined. Today, perhaps less than 1% of professional programers use emacs. I think, part of the reason being that emacs has not modernized (not in the sense of being fashionable, but in the sense of keeping with hardware and software changes in the computing industry). The other major reason, is because emacs itself is not a IDE in a modern sense, and most programing development using compiled languages such as Pascal, C, C++, Java, C#, have moved on with IDE platforms integrated with these language's compiler application.
See also: Modernization of Emacs.
Addendum: Thanks to Rainer Joswig for correction about the history of the lisp machine's keyboards. Source.