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
controljunto 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
ESCao exibir sequências de teclas e\eem sequências. -
A própria chave Esc (no X Window, isso significa que o
Escapekeysym). 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,\ttab -
C-m,RET,\r,return