Se sentirá más cómodo en un X11 Emacs, que puede recibir entrada de teclado y mostrar texto sin pasar por la codificación y decodificación del terminal . La razón principal para usar un editor de modo de texto es ejecutarlo dentro de la pantalla o tmux en una máquina remota, pero gracias a Tramp, generalmente es más fácil editar el archivo remoto en su Emacs local. Dicho esto, puede hacer lo que quiera siempre que su emulador de terminal coopere, como es el caso de Xterm.
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 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 de 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, los modificadores hiper y super generalmente se ignoran. 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 símbolo del sistema, C-q
o C-h c
seguido de la combinación de teclas en Emacs.
Xterm le permite configurar las secuencias de escape para cada clave a través de X recursos . 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
.
XTerm.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 (de 15
a 24
a F5a F12- por razones históricas, F1 a través de F4diferentes secuencias de escape) e number2
indica el modificador ( 2
para Shift, 5
para Ctrl, 3
para Meta, 8
para Ctrl+ Metay agrega 1 para + Shift- no, no es muy consistente).
Tendrá que especificar los modificadores Hyper y Super a través de su número, como a Mod1
través Mod5
. Ejecute xmodmap -pm
para ver el mapeo de keyyms a modificadores. Por ejemplo, si Super_L
está vinculado a Mod5, la siguiente línea (use este caso exacto) define un enlace para Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs traduce 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[32;16~" [(super ?\ )])
Esta publicación está hecha de 80% de material reciclado. ¿Hay alguna terminal de Linux que pueda manejar todas las combinaciones de teclas?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Pero para completar, probé lodefine-key
anterior, pero no pude disparar(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. Solo estaba imprimiendo; 16 ~ en el búfer. Hubiera sido bueno vincular esa secuencia a (kbd "s-SPC") para que tenga la secuencia de teclas enlazada y pueda reasignarla a otros comandos.C-h l
devuelve lo siguiente al presionar s-SPC ahora:ESC [ 3 2 ; 1 6 ~
pero emacs aún se queja de queM-[ 32 is undefined
function-key-map
lugar delocal-function-key-map
? Puede ser una cuestión de cuándo se configuralocal-function-key-map
, ya que depende de la terminal.Si está dispuesto a instalar un paquete de Emacs y configurar su terminal, escribí un paquete de Emacs que puede enseñarle a Emacs y terminales cómo reconocer correctamente todas las teclas del teclado de la PC y las combinaciones de teclas modificadoras:
https://github.com/CyberShadow/term-keys
La codificación del modificador Super no está habilitada de forma predeterminada, pero el paquete es personalizable y permite configurar qué combinaciones de teclas modificadoras están codificadas. Para habilitar las combinaciones de teclas de codificación que incluyen el modificador Super, establezca
term-keys/want-key-p-func
una función que regreset
cuando(elt mods 3)
no sea nula (consulte la implementación predeterminada para obtener una explicación).fuente
Tengo lo siguiente en mis archivos init:
Esto me permite enviar teclas súper e hiper utilizando las teclas de función.
fuente
Respuesta corta: uso
Konsole
.Explicación:
local-function-key-map
tiene una asignación de entradaC-x @ s
aevent-apply-super-modifier
.Konsole
asignaSuper
(la tecla del logotipo de Windows) a la secuencia de escape^X@s
(que no parece estar documentada en ninguna parte, lo descubrí por casualidad). Puede probar esto abriendoKonsole
y presionando, por ejemplo Ctrl-v Win-o.fuente