Supondo que você esteja executando o Emacs diretamente sob um sistema de janelas (Cocoa, MS-DOS, Windows, X, ...) e não dentro de um terminal de texto (gnome-terminal, konsole, rxvt, xterm, ...) é possível.
(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))
Existem três eventos de entrada diferentes em jogo aqui:
-
Ctrl + [, ou seja, o modificador
control
junto com uma chave que envia o caractere[
. O Emacs normalmente mostraria isso comoC-[
(eC-[
aceito porkbd
), se não tivesse um caso especial para isso, como explicado abaixo. -
Número do caractere 27, que é enviado pela tecla Esc em alguns sistemas. O Emacs mostra isso como
ESC
ao exibir sequências de teclas e\e
em sequências. -
A própria chave Esc (no X Window, isso significa que o
Escape
keysym). O Emacs mostra isso comoescape
, a menos que seja traduzido (veja abaixo).
O Emacs normalmente traduz escape
em ESC
, mas isso é feito em um nível relativamente alto, em function-key-map
, então pode ser substituído modificando function-key-map
ou definindo um ligação para escape
no mapa de teclado global ou em um mapa de teclado local. O GNU Emacs 23 introduz o local-function-key-map
, que se aplica por tipo de terminal.
O Emacs sempre traduz C-[
em ESC
, em um nível muito baixo (em keyboard.c
). Isso não é configurável.
No entanto, o Emacs fornece uma maneira de traduzir chaves em um nível relativamente baixo: key-translation-map
. Isso se aplica antes de qualquer ligação global ou local, mas apenas para chaves que não estão em function-key-map
. Então, o truque é trocar ESC
e escape
nesse ponto.
Estes mecanismos são descritos no manual Emacs Lisp sob o cabeçalho "Translation keymaps".
Aliás, princípios semelhantes se aplicam a
-
C-i
,TAB
,\t
tab
-
C-m
,RET
,\r
,return