Sintaxe de string para a macro kbd no Emacs [duplicado]

2

Eu digitei as seguintes macros no meu arquivo .emacs

(global-set-key (kbd "M-<left>") 'windmove-left)          ; move to left windnow
(global-set-key (kbd "M-<right>") 'windmove-right)        ; move to right window
(global-set-key (kbd "M-<up>") 'windmove-up)              ; move to upper window
(global-set-key (kbd "M-<down>") 'windmove-down)          ; move to lower window

No entanto, quando pressiono Alt + à esquerda ou qualquer outra combinação de teclado, recebo erros como o seguinte no minibuffer M-o 3 c is undefined .

Por que isso não funciona? Eu pensei que estava seguindo a sintaxe descrita aqui ( kbd macro ).

    
por Amelio Vazquez-Reina 08.09.2012 / 00:05

1 resposta

2

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.

    
por 08.09.2012 / 00:56