Os terminais conhecem caracteres, não chaves, portanto, chaves sem caractere correspondente precisam ser traduzidas em seqüências de escape e de volta. Quando você pressiona Alt + Esquerda , ela é convertida na seqüência de caracteres \eO3d , em que \e é um caractere de escape. Infelizmente, algumas dessas seqüências de caracteres não são padronizadas, então você precisa declarar o que seu terminal envia ao Emacs.
Pressione Ctrl + Q e depois a combinação de teclas (ex. Alt + Esquerda ) para inserir a sequência de teclas em um buffer. O comando Ctrl + Q diz ao Emacs para interpretar literalmente o caracter de escape inicial. Você verá algo como ^[O3d em que ^[ não é os dois caracteres ^[ , mas um caractere de escape, melhor escrito em uma string Emacs Lisp como \e .
Adicione a seqüência de escape de cada combinação de chaves a input-decode-map . Por exemplo (esse código entra no seu .emacs ):
(define-key input-decode-map "\eO3a" [M-up])
(define-key input-decode-map "\eO3b" [M-down])
(define-key input-decode-map "\eO3c" [M-right])
(define-key input-decode-map "\eO3d" [M-left])
(kbd "M-<up>") ou (kbd "<M-up>") são formas alternativas de escrever [M-up] .
Depois de declarar essas traduções, o Emacs saberá que quando o terminal for enviado, por exemplo, ^[O3d significa a combinação de teclas Alt + Esquerda e suas ligações funcionarão.