¿Qué hace "Key to choose 5th level" en gnome-keyboard-properties?

18

Hay una opción para especificar una tecla que se utilizará para acceder al 5º nivel en el teclado gnome-keyboard-properties("Teclado" en Hardware en la configuración del sistema):

Captura de pantalla de dicho diálogo

Pero si configuro el quinto nivel AltGry el tercer nivel Right Ctrly si configuro la clave 54 de la siguiente manera:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

Obtengo los siguientes resultados al presionar diferentes variaciones:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. Entonces, ¿qué hace el modificador de 5to nivel?

  2. ¿Cómo lo configuro para que pueda obtener 5 o seis caracteres diferentes de una sola tecla (modificado por Shift, Alt Gry Right Ctrlpor ejemplo)?

cenar
fuente

Respuestas:

15

"1. Entonces, ¿qué hace el modificador de quinto nivel?

Elige el quinto nivel. El modificador de segundo nivel (solo turno regular) elige el segundo nivel, y el tercer nivel elige el tercer nivel.

La razón por la que el modificador de quinto nivel elige el quinto nivel en lugar del cuarto nivel (justo después del modificador de tercer nivel) es que estos tres modificadores se pueden combinar de diferentes maneras para elegir ocho niveles diferentes (esto incluye no usar ninguno de los modificadores, que solo está presionando una tecla sin ninguno de esos modificadores). Hay ocho combinaciones desde 2 ↑ 3 = 8. Para los dos primeros modificadores hay cuatro combinaciones:

  • Sin modificadores (nivel 1)
  • Modificador de segundo nivel, también conocido como shift (nivel 2)
  • Modificador de tercer nivel (nivel 3)
  • 2do + 3er modificador (nivel 4)

Agregar el tercer modificador (5to nivel) agrega cuatro niveles más.

"2. ¿Cómo lo configuro para que pueda obtener 5 o seis caracteres diferentes de una sola tecla (modificado por Shift Alt Gry , Right Ctrlpor ejemplo)?

En primer lugar, necesita un diseño que use cinco o más caracteres por tecla. Puede elegir un diseño existente, pero si simplemente desea agregar más niveles al diseño que está utilizando actualmente, puede que no sea óptimo. Por ejemplo, está la distribución del teclado Neo († 1), pero está "optimizada para el idioma alemán", por lo que no es tan bueno para la mayoría de los hablantes de inglés.

Aún así, podría ser instructivo echar un vistazo a las teclas que Neo ha elegido para el modificador de nivel 5.

Diseño Neo

Neo aparentemente llama al modificador de nivel 5 para "Mod4". Como puede ver, usa la tecla a la derecha de la tecla Mayús izquierda ( LSGT) y la tecla / AltGrtecla Alt derecha . Esto está en un teclado europeo (105 teclas) que en comparación con el teclado de EE. UU. (104 teclas) tiene un desplazamiento a la izquierda estrecho y una tecla de retorno alta y delgada. Para una distribución de teclado que se basa en el teclado de EE. UU., Es posible que deba elegir, o prefiera, otras teclas.

Elegir una tecla modificadora de nivel 5

En la respuesta sup, elige usar Xmodmap. Hoy en día, se recomiendan herramientas como Setxkbmap sobre Xmodmap. Xkb viene con muchas opciones predefinidas para cosas como elegir el modificador de nivel 5. Si consulta man xkeyboard-config y busca lv5, encontrará estas opciones:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Entonces, las opciones que se documentan son la LSGTtecla, la tecla alt derecha, la tecla derecha de Windows y la tecla izquierda de Windows. Como hemos visto, Neo usa las dos primeras opciones.

Digamos que quiere usar la lv5:ralt_switch_lockopción con algún diseño. Este comando configura el usdiseño con esta tecla modificadora de nivel 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Entonces, para cualquiera de las opciones que están documentadas man xkeyboard-config, -optionúsela como argumento para usar Setxkbmap.

En caso de que estas opciones no sean suficientes y desee definir otra clave para que sea el modificador de nivel 5, es instructivo mirar las declaraciones de estas opciones. Parecen estar adentro /usr/share/X11/xkb/symbols/level5. La declaración para se lv5:ralt_switch_lockve así:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

El lado derecho de symbols[Group1]declara qué clave o carácter debe producir cada nivel de la clave. Esto usa los ocho niveles posibles ya que se supone que bloquea el modificador de nivel 5 cuando se presiona junto con otra tecla de cambio de nivel 5. Por lo tanto, se emiten los niveles 5–8, ISO_Level5_Lockya que se accede a todos estos niveles manteniendo presionado el cambio de nivel 5 y alguna combinación de las otras teclas de cambio (ninguna para todos). Si solo desea el comportamiento de cambio y no también el comportamiento de bloqueo si se presionan dos, puede hacer una declaración más simple (desde el mismo archivo):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

Agregar niveles adicionales a un diseño

Los diseños Xkb son bastante modulares. Puede incluir diseños existentes y modificarlos. Por lo tanto, podemos elegir un diseño existente con menos de 5 niveles y agregarle algunos niveles.

Puede hacer nuevos diseños copiando el archivo con sus diseños /usr/share/X11/xkb/symbols/, o donde sea que sus herramientas Xkb busquen diseños. Pero esto requiere privilegio sudo, por lo que no es la mejor solución. Alternativamente, puede copiar la estructura de directorios xkb/ y colocar sus diseños en el directorio apropiado xkb/, a saber symbols/. Digamos que has hecho un archivo xkb-tree/symbols/my-layouts. Para usar los diseños definidos en este archivo, puede usar la -print opción de setxkbmapy luego canalizar la salida a xkbcomp. Este script de envoltura toma los diseños como entrada:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

En lo que respecta al archivo con el diseño, supongamos que queremos expandir el diseño "internacional de EE. UU.", Que utiliza cuatro niveles. En primer lugar, configuramos las teclas de cambio de nivel 3 y 5 de la misma manera que lo hace Neo:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

Ahora queremos agregar algunos caracteres adicionales. Solo usemos las primeras cuatro claves de los diseños de Qwerty como ejemplo. Estas claves son Qto R, que corresponden <AD01>a <AD04>. Primero necesitamos hacer que las teclas sean capaces de usar hasta ocho niveles:

key.type[Group1] = "EIGHT_LEVEL";

Para los primeros cuatro niveles, para no redefinirlos, los asignamos a NoSymbol. Luego agregamos dos niveles. En el nivel 5 agregamos las flechas ←↓↑→(† 2). En el nivel 6 agregamos las teclas de dirección. Nuestro diseño termina luciendo así:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

Para usarlo, podemos usar el script de envoltura que creamos:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo está de(neo)en Xkb; setxkbmap "de(neo)".

† 2: para encontrar los nombres simbólicos que usa Xkb, busque un archivo llamado keysymdef.h. Debe estar debajo de un directorio llamado X11/. También puede usar nombres Unicode, por ejemplo U2192para U + 2192.

Guildenstern
fuente
1
Gracias por tomarse el tiempo para componer esta respuesta. Estaba buscando una manera de usar mis teclas JKLI como teclas de flecha por un tiempo, así que esto fue increíblemente útil. ¡Disfruta estos 50 puntos extra! (Debería poder asignar la recompensa mañana.)
Glutanimate
1
Bueno, gracias, esta es una gran respuesta incluso si llega un poco tarde, pero eso es exactamente lo que estaba buscando (pero ahora GNOME en realidad no admite la configuración del modificador, pero siempre que funcione usando archivos de configuración, todo esta bien).
Sup
8

Bueno, después de un poco de excavación:

(1) La clave para elegir el 5to nivel hace algunas cosas raras (con respecto a algunos diseños en francés) que no son relevantes para lo que quería hacer. Básicamente establece qué tecla va a actuar como ISO_Level5_Shift. ISO_Level5_Shift se usa en algunos diseños oscuros. Esta respuesta se basa en la cantidad de resultados que da Google al buscar "ISO_Level5_Shift" y en estos enlaces .

(2) No se puede usar para obtener 6 símbolos de una tecla física. Una forma de lograr esto es con el uso del archivo .xmodmap ubicado en el directorio $ HOME.

Primero, comando

xmodmap -pm

da qué símbolos clave actúan como varios modificadores. En mi sistema era como sigue:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

Mod3 necesita configurarse para usar 6 símbolos con una tecla. Esto debe colocarse en el archivo .xmodmap:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

Entonces xmodmap -pm me dio:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

Donde keycode 94 es la clave que elegí para actuar como mod3. Los códigos de teclas de varias teclas físicas se pueden encontrar con la herramienta de línea de comandos xev (solo ejecútelo y presione varias teclas, se mostrarán los códigos de teclas).

Entonces, si coloco en el archivo .xmodmap

keycode 54 = 1 2 3 4 5 6

o corre

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

Obtengo seis símbolos diferentes de una tecla con el uso de altgr, shift y keycode 94 (es una tecla inútil al lado del desplazamiento a la izquierda en mi diseño físico).

ACTUALIZACIÓN: si necesita solo cinco símbolos, es útil configurarlo así:

keycode 54 = 1 2 3 3 5 6

Ocasionalmente me sucede que obtengo 4 en lugar de 3 de lo contrario.

cenar
fuente