Quando você pressiona uma tecla ou combinação de teclas em um terminal, ela é transmitida para o aplicativo em execução no terminal como uma seqüência de um ou mais caracteres. Por exemplo, quando você pressiona a , o aplicativo recebe a
. Quando você pressiona Enter , o aplicativo recebe o caractere CR
(a.k.a. ^M
(pronuncia-se "control-emm"), a.k.a. o caractere número 13, a.k.a. \r
ou 5
). As combinações de teclas que envolvem Alt são normalmente transmitidas como o caractere ESC
(a.ka. ^[
aka \e
ou 3
) seguido pela sequência da combinação de teclas ou chaves sem Alt . Teclas de função e outras combinações de teclas são transmitidas como seqüências de escape iniciando com \e[
ou \eO
.
As seqüências de escape não são totalmente padronizadas e os terminais normalmente ignoram certos atributos para determinadas chaves. Por exemplo, Ctrl + Shift + letra é freqüentemente transmitido exatamente como Ctrl + letra por padrão.
Você pode ver o que o seu terminal envia para uma combinação de teclas pressionando Ctrl + V seguido por essa combinação de teclas em um prompt de shell ou C-q
ou C-h c
seguido pela combinação de teclas no Emacs.
Com alguns emuladores de terminal, você pode configurar as seqüências de escape para cada chave. No Xterm, isso é feito através de recursos X . A maioria das configurações lê recursos de ~/.Xresources
quando o X é iniciado e você pode carregar o arquivo manualmente com xrdb -merge ~/.Xresources
.
Term.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <key>Return: string("3[73;5~") \n\
Ctrl Shift ~Meta <key>percent: string("3[37;6~")
Uma convenção comum usa seqüências de escape da forma ESC [ number1 ; number2 ~
para teclas de função com modificadores. number1
indica a tecla de função ( 15
to 24
para F5 para F12 - por razões históricas, F1 a F4 têm diferentes seqüências de escape) e number2
indica o modificador ( 2
para Shift , 5
para Ctrl , 3
para Meta , 8
para Ctrl + Meta , e adicione 1 para + Shift - não, não é muito consistente).
O Emacs traduz seqüências de escape em sua representação de chave interna por meio de input-decode-map
or local-function-key-map
(ou function-key-map
antes do Emacs 23).
(define-key local-function-key-map "3[73;5~" [(control return)])
(define-key local-function-key-map "3[37;6~" [(control ?L)])