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
?ESC
(a menos que desee probar algún carácter ≥128, pero eso restringirá las posibles codificaciones de entrada) y el segundo carácter debe ser algo para lo que no desee ningúnESC foo
enlace.local-set-key
realidad debería serdefine-key
? El primero da un error (número incorrecto de argumentos), mientras que el segundo funciona, al menos para <kbd> C-Enter </kbd>. Parece que Konsole todavía tiene problemas para enviar <kbd> CM-% </kbd>.define-key
. No sé si las teclas de escape de Konsole se pueden configurar, xterm es probablemente más personalizable que cualquier otra alternativa.XTerm*modifyOtherKeys: 2
recurso generará secuencias únicas incluso paraC-M-
combinaciones, pero con esa configuración necesitará proporcionar muchas asignaciones personalizadas (XTerm*modifyOtherKeys: 1
es menos capaz pero mucho más funcional desde el primer momento). Para un ejemplo (aunque uno que no funcionaba para mí) ver laxterm-extras.el
biblioteca y el asociado.Xresources
y.inputrc
archivos en el easymacs descarga.Para un conjunto de claves limitado pero significativo, suponiendo que la Konsole de KDE, uno puede hacer lo siguiente para tener combinaciones de teclas complejas y que funcionen en emacs -nw:
Usaré mi implementación de ponerme
S-<RET>
a trabajar como ejemplo:Return+Shift
y dale una secuencia de teclas útil (elegí\E[27;3
cuál creo que es la secuencia de teclas enviada por X cuando estaba hurgando con xev, pero eso puede estar mal; lo importante es hacer Asegúrese de que tenga un escape adecuado y no entre en conflicto con nada más).Arranque
emacs -nw
y en el buffer scratch evalúe:(read-key-sequence-vector "Type your new key:")
luego escriba su nueva combinación de teclas.
Debe escupir una secuencia de teclas que puede vincular.
(Volvió
[27 91 50 55 59 51]
a mí en comparación con el viejo aburrido[13]
antes de que me metiera con la combinación de teclas de Konsole).Agregue a su configuración de emacs:
Lo probé
emacs -nw
en una sesión de pantalla usando:fuente
La respuesta corta es que es una limitación fundamental de todos los terminales.
La respuesta un poco más larga es que incluso si alguien creó un terminal que hace lo que usted desea, Emacs requeriría cambios importantes para trabajar con este terminal hipotético.
fuente
Hay algunos esfuerzos para extender el protocolo VT de una manera que permita la entrada de teclado sin pérdidas (entre otras características, como gráficos).
Un ejemplo es notty: https://github.com/withoutboats/notty
fuente