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 \ro \015). Las combinaciones de teclas involucradas Altgeneralmente se transmiten como el carácter ESC(también ^[conocido como \eo \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-qo C-h cseguido 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 ~/.Xresourcesinicio 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. number1indica la tecla de función ( 15a 24para F5a F12- por razones históricas, F1 a través de F4diferentes secuencias de escape) e number2indica el modificador ( 2para Shift, 3para Meta, 5para Ctrl, 7para 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-mapolocal-function-key-map (o function-key-mapantes 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?