Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bind markdown-insert-list-item to M-RET rather than M-<return>
This follows what e.g. org-mode and tex-mode do: lisp/org/org.el: (org-defkey org-mode-map (kbd "M-RET") #'org-meta-return) lisp/textmodes/tex-mode.el: (define-key map "\M-\r" 'latex-insert-item) Long story short (but hopefully accurate): - <return> refers to the physical "⏎" function key; - terminals do not tell applications that a function key was pressed, rather they send a character sequence; - so on terminals, M-<return> cannot work; - RET ≡ \r is not an actual key, but rather the control character emitted by pressing Control-M in a terminal; - on graphical displays, Emacs automatically translates <return> into RET if there is no binding for <return>. Using M-RET rather than M-<return> allows the following things: 1. the binding works on terminals[^1]; 2. C-M-m now also works as an alternative (… which was my initial motivation to investigate this). Sources and gory details: - (emacs) Keymaps > Most modern keyboards have function keys as well as character > keys. Function keys send input events just as character keys > do, and keymaps can have bindings for them. > > … > > On text terminals, typing a function key actually sends the > computer a sequence of characters; the precise details of the > sequence depends on the function key and on the terminal type. - (emacs) Named ASCII Chars > Emacs can distinguish these two kinds of input if the keyboard > does. It treats the special keys as function keys named ‘tab’, > ‘return’, ‘backspace’, ‘linefeed’, ‘escape’, and ‘delete’. > These function keys translate automatically into the > corresponding ASCII characters _if_ they have no bindings of > their own. > > If you do not want to distinguish between (for example) <TAB> > and ‘C-i’, make just one binding, for the ASCII character > <TAB> (octal code 011). If you do want to distinguish, make one > binding for this ASCII character, and another for the function > key ‘tab’. > > With an ordinary ASCII terminal, there is no way to distinguish > between <TAB> and ‘C-i’ (and likewise for other such pairs), > because the terminal sends the same character in both cases. - Xah Lee: - <http://ergoemacs.org/emacs/emacs_key_notation_return_vs_RET.html> - <http://ergoemacs.org/emacs/keyboard_shortcuts.html> - <http://ergoemacs.org/emacs/keystroke_rep.html> - a *scratch* buffer: (kbd "RET") ; "^M" (kbd "\r") ; "^M" (kbd "C-m") ; "^M" (kbd "<return>") ; [return] - on X: C-h c ⏎ ; RET (translated from <return>) runs the command newline - on a TTY: C-h c ⏎ ; RET runs the command newline [^1]: Provided the terminals send the correct character sequences. This is not always straightforward. Here are the results of pressing Alt-⏎ on three different terminals: - on a TTY: M-RET - on Terminator: C-M-j - on XTerm: toggles fullscreen With this .Xresources snippet: XTerm.vt100.translations: #override \n\ Alt <Key>Return: insert-eight-bit() XTerm also sends M-RET. Also add test for M-RET adding list items.
- Loading branch information