Traté de usar xmodmap
para asignar META_La la MENUclave, pero no parece ser aceptado por bash
la meta clave. Por lo tanto, me pregunto cómo estos componentes (teclado, X, xterm, bash) se relacionan entre sí en lo que respecta a las Meta y Super Teclas. Cualquier explicación sería apreciada.
Dejame poner esto de otro modo. La página de manual de bash dice, por ejemplo, que la función yank-nth-arg está vinculada M-C-yy funciona cuando presiono Esc-Control-y. Pero esto me parece un poco engorroso. Entonces, ¿cómo puedo hacer que bash acepte otra clave como Meta(como la Menu) para todos sus enlaces predeterminados?
MENU
clave es notada por X? ¿Qué administrador de ventanas está utilizando? Algunos de ellos pueden ayudarlo a redefinir sus claves.Respuestas:
El mapeo de las teclas del teclado a los modificadores gusta
Meta
yControl
es manejado por el servidor X (es decir, la parte de bajo nivel de la GUI). Este mapeo se puede manipular a través delxmodmap
comando de estilo antiguo o la interfaz XKB de estilo nuevo , o mediante herramientas de configuración de GUI que utilizan uno de estos bajo el capó.Por defecto, en la mayoría de las configuraciones, la
Meta
clave es la clave etiquetada Alt. Esto se debe a que históricamente, muchas estaciones de trabajo Unix tenían una clave etiquetada Metadonde las PC tienen una clave etiquetada Alt. Entonces, si tiene un enlace paraM-C-y
, presione Ctrl+ Alt+ Y.Para verificar cuáles son sus enlaces actuales, inicie el
xev
programa en un terminal. Con la ventana xev enfocada, presione las teclas; verá una transcripción de los eventos generados en la terminal.La comunicación entre emuladores de terminal (o dispositivos de terminal correspondientes a terminales físicos) y aplicaciones utiliza caracteres. Cuando presiona A, el terminal recibe la información "
A
clave, sin modificador", pero lo que envía a la aplicación que se ejecuta en el terminal es el caráctera
. Cuando presiona una tecla de función como Upo F1, no hay un carácter correspondiente; el terminal envía una secuencia de caracteres que comienza con el carácter de escape (byte 27, a veces escrito\e
o^[
). Cuando un emulador de terminal como xterm recibió un evento de presionar una tecla con elMeta
modificador, traduce esa tecla a un carácter de escape seguido de la función subyacente de la tecla, por ejemplo\ea
(escape, minúscula a) cuando presiona Meta+ A.¿Cuál es la diferencia exacta entre un 'terminal', un 'shell', un 'tty' y una 'consola'? puede ser útil fondo.
fuente
El evento clave es generado por el servidor X (como lo configuró
xmodmap
) y se envía a su aplicación X. Su administrador de ventanas podría interceptar esto antes de enviarlo a xterm. XTerm, a su vez, traduce el evento a algunos bytes y los envía a la pseudo-tty asignada por su shell, bash.Tenga en cuenta que XTerm no traduce todos los eventos directamente a bytes. Por ejemplo, las teclas Ctrly shift, por sí mismas, generan eventos de teclado X, pero XTerm no envía nada al shell (u otra aplicación) que se ejecuta dentro de él. Esto también incluye la Metaclave por sí misma, pero no la Menuclave. Sin embargo, el evento generado al presionar Meta- ehará que XTerm envíe el byte 0xE5 o la secuencia de dos bytes 0x1B 0x65, dependiendo de la configuración del recurso XTerm.VT100.metaSendsEscape.
fuente
La meta clave de Bash se definió originalmente de esta manera (
lib/readline/ChangeLog
):Esa es la forma en que se interpreta con ncurses y xterm . Se proporcionaron algunos terminales para hacer que esta función sea opcional (ese aspecto no estaba muy extendido. La mayoría de los terminales que encontrará utilizan un comportamiento codificado (y no muy interesante). La página del manual de terminfo documenta estas capacidades de terminal:
y explica la característica:
Se incorporó una característica diferente, prefijando un carácter de escape en respuesta a la
Alt
clave en algunos emuladores de terminal. Bash (en realidad lareadline
biblioteca) documenta ese uso en su registro de cambios de 2004:Meta es un caso especial de una tecla modificadora . Al igual que controly shift, lo presiona al mismo tiempo que otra tecla y espera ver algo diferente de presionar la tecla por sí mismo. X proporciona claves modificadoras asignando un bit en el valor modificador pasado en el evento X para la clave. Las pulsaciones de teclas pueden ser múltiples eventos X; X proporciona funciones para combinar estos eventos mientras retiene los modificadores.
X también define símbolos para cada una de las teclas que pueden aparecer en su teclado. Proporciona otros valores (como Unicode) mediante un manejo especial en las funciones que combinan eventos.
Pero "meta" es un caso especial.
Las aplicaciones X no tienen metaclave, excepto por convención. X no tiene una definición para la metaclave o el meta modificador. Convencionalmente, los terminales buscan la Alttecla y / o uno de los modificadores se sabe que
xmodmap
, por ejemplo,mod2
. La característica posterior de xkb complica las cosas (pero no proporciona ninguna mejora en relación con esta discusión) al proporcionar otra capa de información para encontrar la Altclave.La convención, por supuesto, puede llevarte solo hasta cierto punto, dado que
xmodmap
nixkb
sabe nada en particular sobre meta . xterm, por ejemplo, es configurable y no todos los usuarios desean configurar meta de la misma manera. Por ejemplo, Altpuede no ser la metaclave deseada, por ejemplo, si se usa en eltranslation
recurso. Otra tecla puede ser la meta tecla, pero los usuarios (particularmente aquellos que usan secuencias de escape en bash) pueden querer que se envíe un carácter de escape cuando presionan Alt. Pero tenga en cuenta que a menos que esté configurado como un modificador, nada de eso sucede: xterm no combina eventos por sí mismo.xterm tiene varias configuraciones de recursos (documentadas en la página del manual ):
altIsNotMeta
yaltSendsEscape
(agregado en 2007 ).eightBitInput
desde 2006 corresponde al sentido original del modo meta, y hay una secuencia de escape definida para esto que proporciona las capacidades del terminalsmm
yrmm
(establecer / eliminar el modo meta).eightBitInput
se modificó en 2003 para tener en cuenta UTF-8 cambiando los valores Unicode decodificados por 128 en lugar de los bytes de entrada sin formato.metaSendsEscape
data de 1999eightBitInput
es mucho mayor quemetaSendsEscape
. Eso ha implementado una opción entre el modo meta (agregando el octavo bit) o prefijando una clave escapedesde X11R4 (1989). Pero la característica se determinó al inicio: se verificó durante la inicialización para determinar si la entrada se configuró para permitir 8 bits o solo 7. Después de eso, no cambió.Algunas personas equiparan los dos ( 8th-bit y escape-prefix), refiriéndose a este último como meta modo. Dependiendo de su punto de vista sobre el asunto, la
eightBitInput
configuración de recursos de xterm es parte de la solución para obtener una metaclave viable.Otras lecturas:
fuente