Emacs M-key Notation vs Alt+key Notation

By Xah Lee. Date: . Last updated: .

Emacs should adopt the “Alt+key” and “Ctrl+key” notation throughout its documentation. (as opposed to emacs's “M-key” and “C-key” notation)


Universally Understood

firefox edit menu 2015-06
Firefox version 38 (as of ), edit menu, on Linux

In both Windows and Linux's documentations, they use Alt+key and Ctrl+key notation. Windows and Linux account for about 95% of computers used world wide.

Identical to Key's Label

The word “Alt” and “Ctrl” are the exact labels printed on the keys of PC keyboard. More than 99% of keyboards sold today are PC keyboard.


generic pc keyboard left side
Generic PC keyboard 1999, left side. Note the labels “Ctrl” and “Alt”.

Using a notation that contains the actual label on keyboard's keys is much easier to understand. A beginning computer user, can read the “Ctrl+key” notation and figure out which keys to press. Emacs's notation of “M-key” and “C-key” requires a learning step. Even though it is a minor one, but it adds complexity, especially because emacs has already huge number of non-standard user interface, 1970's outdated terminologies, and huge number of features.

(Apple's computers, which account for about %4 market share today, also use a notation where the name or symbol appears on the labels of Apple keyboard's keys exactly. (OS X's documentation uses the notation “Command-key” and “Option-key”. Application's menus shows them as “⌘key” and “⌥key”. Both the word “Command” and symbol “⌘” appear on the key's label, same for “Option” and “⌥”.)


Meta is Alt in Practice

By default on all major operating systems in use (Windows, Linux, OS X), emacs maps its Meta to Alt key. So, practically speaking, the Meta key is the Alt key.

Keyboards Don't Have Meta Key Today

The Meta key was one of the modifier key on lisp machine keyboards in the 1980s. The lisp machine and keyboards have been obsolete since early 1990s. (for photos and detail, see: Why Emacs Keys are Painful.)

One of Lisp Machine's keyboard. [see Space-cadet Keyboard and Lisp Machine Keyboards]

There is practically no keyboard today that has the Meta key. Sun Microsystem's keyboard has a key labeled with a symbol “◆” called diamond. Sun's official documentation refers to this key as Meta key. Sun's keyboards have a market share perhaps less than 0.001%.

sun type 6 keyboard left side
The Meta key with diamond “◆” icon on Sun Microsystem's Type 6 Keyboard.

Proposed Change

Here's a more precise description and clarification on exactly what is proposed.

Note that this suggestion does not call changes in elisp keymacro syntax, nor any change of elisp function such as “kbd”.

Questions and Answers

How many Emacs users do you know who, beyond their first day or two of Emacs use, have difficulty with the term Meta? I know of none, and I think only you who is irritated by it.

We can look at the situation from the other way. For each such convert, there are perhaps one hundred more people, who simply looked at emacs for 10 minutes, and refused to look at emacs again for the rest of their programing career.

Adopting the 【Alt+key】 notation will create confusion in elisp's keyboard macro syntax. User will ask, why is Alt key represented by “M-” and not “A-”?

The Alt+key notation makes emacs easy to use for beginners.

For advanced users who want to do custom keybinding, they can easily understand that the syntax “M-” stands for Meta and is by default mapped to the Alt key.

(Emacs diehards like to say, that if user can't understand “M-” for “Alt+”, then the user shouldn't use emacs. To quip: if someone interested in elisp get confused that “Alt+” is represented in lisp code as “M-”, then he isn't fit to code elisp.)

Lisp itself has lots of un-fixable baggage in its key macro syntax. For example, there's also Hyper, Super, with syntax H- and s- (Shift is S-). These keys are remnants of the Symbolics LISP Machine's keyboard in the 1980s, and don't exist in any keyboard today. [see Keyboard Hardware's Influence on Keyboard Shortcut Design (How Emacs and vi keys came to be)] (but you can bind them just like Meta, of course).

Further, there are quite a lot complex variations of the keyboard macro syntax. Here's a example of equivalent syntax for binding the Enter key:

; equivalent code for a named special key: Enter
 (global-set-key "\r" 'cmd)
 (global-set-key [?\r] 'cmd)
 (global-set-key [13] 'cmd)
 (global-set-key [(13)] 'cmd)
 (global-set-key [return] 'cmd)
 (global-set-key [?\^M] 'cmd)
 (global-set-key [?\^m] 'cmd)
 (global-set-key [?\C-M] 'cmd)
 (global-set-key [?\C-m] 'cmd)
 (global-set-key [(?\C-m)] 'cmd)
 (global-set-key (kbd "RET") 'cmd)
 (global-set-key (kbd "<return>") 'cmd)

[see Emacs's Key Syntax Explained]

It is likely that half of emacs developers, can't explain fully every variation above in exacting detail.

There's also some syntax that compile but has no effect:

(global-set-key (kbd "M-S-b") 'cmd) ; compile but no effect

In summary, if we adopt Alt+key notation in manuals and menus, i do not think it introduces any confusion when it comes to the elisp coding or emacs customization related to keybindings. I think it actually makes it simpler. The logic would be like this:

It shouldn't change because i can press “Esc key” for “M-key”, and it is quite useful in terminal.

The proposed change is about notation, not about keybindings. You can still use these equivalent keys.

For those curious, besides 【Meta+key】 and 【Escape key】 equivalence, there is also 【Ctrl+[ key】. These equivalences are more as by-products of emacs's keybinding implementation technicalities and emacs's historical baggage, not exactly as conscious design decisions.

For example, the reason 【Escape key】 and 【Meta+key】 shortcuts are equivalent is historical. By the way emacs implements keybindings as intercepting key presses as character streams, they have the same binary representation. (this is in the 1970s, of ASCII and terminals)

Other examples of such equivalence includes: 【Ctrl+m】and Enter, 【Ctrl+i】 and Tab. These equivalence actually create problems. For example, user cannot easily re-assign the 【Ctrl+i】 shortcut without effecting the meaning of Tab key. (it can be done, but involves detailed knowledge of elisp and convoluted workaround.)

Emacs Modernization

  1. Simple Changes Emacs Should Adopt
  2. Why Emacs Keys are Painful
  3. Problems of the Scratch Buffer
  4. M-key Notation vs Alt+key Notation
  5. Menu Problem
  6. Mode Line Problem
  7. cua-mode Problems
  8. kill-buffer Induces Buffer Accumulation
  9. Emacs Form Feed ^L
  10. Inconsistency of Search Features
  11. Single Key to Delete Whole Line
  12. Emacs HTML Mode Sucks
  13. Emacs Does Not Support Viewing Images Files In Windows
  14. Emacs Spell Checker Problems
  15. Adopt HTML as Texinfo Replacement
  16. Support HTML Mail
  17. Problems of “man” Command
  18. Emacs Lisp Mode Syntax Coloring Problem
  19. Emacs Ahk Mode Problems
  20. Problems of Emacs's Manual
  21. Problems of Emacs's Manual; Examples
  22. Emacs: Have You Read Emacs Manual?
  23. Elisp: Ban Syntax Table
  24. Emacs: Make elisp-index-search use Current Symbol
  25. Emacs: Usability Problems of Mode Documentation
  26. Emacs GNU Texinfo Problems; Invalid HTML
  27. A Record of Frustration in IT Industry; Disappearing FSF URLs, 2006
  28. Emacs Manual Node Persistency Issues
  29. Emacs: dired-do-query-replace-regex Replace ALL (fixed)
  30. Problems of Emacs Supporting Obsolete Systems
  31. Elisp: Function to Copy/Delete a Dir Recursively (fixed)
  32. Thoughts on Common Lisp Scheme Lisp Based Emacs
  33. Text Editors Popularity and Market Research
  34. Text Editor's Cursor Movement Behavior (emacs, vi, Notepad++)
  35. GNU Emacs Development Inefficiency
  36. Emacs Dev Inefficiency and Emacs Web 2.0?
  37. Letter-Case Commands Usability Problems
  38. Emacs: Select Line, between Quotes, Extend Selection
  39. Emacs: isearch Current Word
  40. Suggestions on Line Wrap Commands
  41. Emacs: Single Key to Delete Whole Line
  42. Emacs Undo and Emacs Cult Problem

If you have a question, put $5 at patreon and message me.
Or Buy Xah Emacs Tutorial
Or buy a nice keyboard: Best Keyboards for Emacs


Emacs Lisp