La risposta accettata in combinazione con il link in the first comment to it è sufficiente per iniziare una soluzione completa. I passi sono:
- rendere i codici di uscita di escape del terminale per il tasto
- rendere Emacs riconoscono i codici di escape come la pressione dei tasti standard di
- legano la pressione del tasto in una mappa modalità
La prima è molto terminale e/o dipendente dal sistema operativo.
Il collegamento nel primo commento mostra alcuni esempi per X Window System. I nomi dei tasti sono disponibili in /usr/X11R6/include/X11/keysymdef.h
(o provare locate keysymdef.h
), con prefisso XK_
(che deve essere rimosso per i nostri scopi).Ho letto che i nomi simbolici sono preferiti rispetto ai letterali chiave.
Io attualmente non corro X, ma penso che dovrebbe assomigliare a questo nel tuo caso:
XTerm.VT100.Translations: #override \
Ctrl ~Meta ~Shift <Key> equal: string(0x1b) string("[emacs-C-=")\n
La prima stringa è la fuga, il secondo è di tua scelta.
In iTerm è possibile utilizzare Preferences->Keys
e scegliere Send Escape Sequence
come Action
. Ad esempio, ho:

Emacs Wiki lists some configuration methods per altri terminali.
Ora è possibile insegnare a Emacs a riconoscerlo come C- =. Prima define-key
in input-decode-map
. Ho un paio di funzioni di supporto:
(defun my/global-map-and-set-key (key command &optional prefix suffix)
"`my/map-key' KEY then `global-set-key' KEY with COMMAND.
PREFIX or SUFFIX can wrap the key when passing to `global-set-key'."
(my/map-key key)
(global-set-key (kbd (concat prefix key suffix)) command))
(defun my/map-key (key)
"Map KEY from escape sequence \"\e[emacs-KEY\."
(define-key function-key-map (concat "\e[emacs-" key) (kbd key)))
Dunque:
(my/global-map-and-set-key "C-=" 'some-function-to-bind-to)
Alcuni tasti (attualmente: ()\|;'`"#.,
) avrà bisogno di fuggire nella stringa, come C-\.
.
fonte
2016-10-24 15:38:13
C-i è generalmente tradotto come 'TAB' in emacs. Quindi non sono sorpreso se 'C-M-i' è tradotto come' M-TAB' – kindahero