Предполагая, что вы запускаете Emacs непосредственно под оконной системой (Cocoa, MS-DOS, Windows, X, ...), а не внутри текстового терминала (gnome-terminal, konsole, rxvt, xterm, ...), это возможно ,
(define-key key-translation-map [?\C-\[] [(control left_bracket)])
(define-key key-translation-map [escape] [?\e])
(define-key function-key-map [escape] nil)
(define-key function-key-map [?\e] nil)
(when (boundp 'local-function-key-map)
;;(define-key local-function-key-map [escape] nil)
(defun remove-escape-from-local-function-key-map ()
(define-key local-function-key-map [?\e] nil)
(define-key local-function-key-map [escape] nil))
(add-hook 'term-setup-hook 'remove-escape-from-local-function-key-map))
Здесь есть три разных входных события:
Ctrl+[, то есть модификатор control вместе с клавишей, которая отправляет символ [ . Emacs обычно показывает это как C-[ (и C-[ принятый kbd), если у него нет особого случая для этого, как объяснено ниже.
Символ № 27, который отправляется клавишей Esc в некоторых системах. Emacs показывает это как ESC при отображении последовательностей клавиш и \e в строках.
Сам ключ Esc (в X Window это означает ключ Escape). Emacs показывает это как escape если не переведено (см. Ниже).
Emacs обычно переводит escape в ESC , но это делается на относительно высоком уровне, в function-key-map , поэтому его можно переопределить, изменив function-key-map или определив привязку для escape в глобальной таблице ключей или локальном раскладка. В GNU Emacs 23 вводится local-function-key-map которая применяется для каждого типа терминала.
Emacs всегда переводит C-[ в ESC , на очень низком уровне (в keyboard.c). Это не настраивается.
Тем не менее, Emacs предоставляет способ перевода ключей на относительно низком уровне: key-translation-map. Это применяется перед любой глобальной или локальной привязкой, но только для ключей, которых нет в function-key-map . Таким образом, хитрость заключается в том, чтобы обменять ESC и escape в этой точке.
Эти механизмы описаны в руководстве по Emacs Lisp под заголовком "Преобразование ключей".
Кстати, аналогичные принципы применяются к
C-i , TAB , \t tab
C-m , RET , \r , return