Cuando presiona una tecla o combinación de teclas en un terminal, se transmite a la aplicación que se ejecuta en el terminal como una secuencia de uno o más caracteres. Por ejemplo, cuando presiona a, la aplicación recibe a
. Cuando presiona Enter, la aplicación recibe el carácter CR
(también conocido como ^M
"control-emm"), también conocido como el número de caracteres 13, también conocido como \r
o \015
). Las combinaciones de teclas involucradas Altgeneralmente se transmiten como el carácter ESC
(también ^[
conocido como \e
o \033
) seguido de la secuencia para la combinación de teclas o teclas sin ellas Alt. Las teclas de función y otras combinaciones de teclas se transmiten como secuencias de escape que comienzan con \e[
o \eO
.
Las secuencias de escape no están completamente estandarizadas, y los terminales generalmente ignoran ciertos atributos para ciertas claves. Por ejemplo, Ctrl+ Shift+ a lettermenudo se transmite exactamente como Ctrl+ letterde forma predeterminada.
Puede ver lo que su terminal envía para una combinación de teclas presionando Ctrl+ Vseguido de esa combinación de teclas en un indicador de comandos de shell, C-q
o C-h c
seguido de la combinación de teclas en Emacs.
Con algunos emuladores de terminal, puede configurar las secuencias de escape para cada clave. En Xterm, esto se hace a través de recursos X . La mayoría de las configuraciones leen los recursos desde el ~/.Xresources
inicio de X, y puede cargar el archivo manualmente con xrdb -merge ~/.Xresources
.
Term.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <key>percent: string("\033[37;6~")
Una convención común usa secuencias de escape de la forma ESC [ number1 ; number2 ~
para teclas de función con modificadores. number1
indica la tecla de función ( 15
a 24
para F5a F12- por razones históricas, F1 a través de F4diferentes secuencias de escape) e number2
indica el modificador ( 2
para Shift, 3
para Meta, 5
para Ctrl, 7
para Ctrl+ Meta, y agrega 1 para Shiftcon al menos uno de Ctrlo Meta).
Emacs traduce las secuencias de escape en su representación clave interna a través de input-decode-map
olocal-function-key-map
(o function-key-map
antes de Emacs 23).
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
infocmp $TERM
?