Que fait «Touche pour choisir le 5e niveau» dans gnome-keyboard-properties?

18

Il y a une option pour spécifier une touche à utiliser pour accéder au 5ème niveau sur le clavier dans gnome-keyboard-properties("Clavier" sous Matériel dans les paramètres système):

Capture d'écran de ladite boîte de dialogue

Mais si je règle le 5ème niveau sur AltGret le troisième niveau sur Right Ctrlet si je règle la clé 54 comme suit:

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

J'obtiens les résultats suivants en appuyant sur différentes variantes:

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. Alors, que fait le modificateur de 5ème niveau?

  2. Comment puis-je mettre en place pour que je puisse obtenir 5 ou six personnages différents sur une seule touche (modifiée par Shift, Alt Gret Right Ctrlpar exemple)?

souper
la source

Réponses:

15

"1. Alors, que fait le modificateur de 5ème niveau? "

Il choisit le cinquième niveau. Le modificateur de 2e niveau (juste un changement régulier) choisit le deuxième niveau et le 3e niveau choisit le troisième niveau.

La raison pour laquelle le modificateur de 5e niveau choisit le cinquième niveau au lieu du quatrième niveau (juste après le modificateur de 3e niveau) est que ces trois modificateurs peuvent être combinés de différentes manières pour choisir huit niveaux différents (cela inclut de n'utiliser aucun des modificateurs, qui est juste en appuyant sur une touche sans ces modificateurs). Il y a huit combinaisons depuis 2 ↑ 3 = 8. Pour les deux premiers modificateurs, il y a quatre combinaisons:

  • Pas de modificateurs (niveau 1)
  • Modificateur de 2e niveau, alias shift (niveau 2)
  • Modificateur de 3e niveau (niveau 3)
  • 2e + 3e modificateur (niveau 4)

L'ajout du troisième modificateur (5e niveau) ajoute quatre niveaux supplémentaires.

«2. Comment puis-je le configurer pour que je puisse obtenir 5 ou six caractères différents sur une seule clé (modifiée par Shift, Alt Gret Right Ctrlpar exemple)? "

Tout d'abord, vous avez besoin d'une mise en page qui utilise cinq caractères ou plus par touche. Vous pouvez choisir une disposition existante, mais si vous souhaitez simplement ajouter plus de niveaux à la disposition que vous utilisez actuellement, cela peut ne pas être optimal. Par exemple, il y a la disposition du clavier Neo († 1), mais elle est «optimisée pour la langue allemande», donc pas géniale pour la plupart des anglophones.

Néanmoins, il pourrait être instructif de voir quelles touches Neo a choisies pour le modificateur de niveau 5.

Disposition néo

Neo appelle apparemment le modificateur de niveau 5 pour «Mod4». Comme vous pouvez le voir, il utilise la touche à droite de la touche Maj gauche ( LSGT) et la touche Alt droite / AltGrtouche. Il s'agit d'un clavier européen (105 touches) qui, par rapport au clavier américain (104 touches), a un décalage vers la gauche étroit et une touche de retour haute et fine. Pour une disposition de clavier basée sur le clavier américain, il peut être nécessaire ou préférable de choisir d'autres touches.

Choisir une touche de modification de niveau 5

Dans la réponse de sup, il choisit d'utiliser Xmodmap. De nos jours, des outils comme Setxkbmap sont recommandés par rapport à Xmodmap. Xkb est livré avec de nombreuses options prédéfinies pour des choses comme le choix du modificateur de niveau 5. Si vous consultez man xkeyboard-config et recherchez, lv5vous trouverez ces options:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ 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                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Les options documentées sont donc la LSGTclé, la touche alt droite, la touche Windows droite et la touche Windows gauche. Comme nous l'avons vu, Neo utilise les deux premières options.

Disons que vous souhaitez utiliser l' lv5:ralt_switch_lockoption avec une mise en page. Cette commande configure la usmise en page avec cette touche de modification de niveau 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Donc, pour l'une des options décrites dans man xkeyboard-config, utilisez-la comme argument -optionlors de l'utilisation de Setxkbmap.

Dans le cas où ces options ne sont pas suffisantes et que vous souhaitez définir une autre clé pour être le modificateur de niveau 5, il est instructif de regarder les déclarations de ces options. Ils semblent être dedans /usr/share/X11/xkb/symbols/level5. La déclaration de lv5:ralt_switch_lockressemble à ceci:

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 ]
  };
};

Le côté droit de symbols[Group1]déclare quelle clé ou caractère chaque niveau de la clé doit produire. Cela utilise les huit niveaux possibles car il est censé verrouiller le modificateur de niveau 5 lorsqu'il est enfoncé avec une autre touche de décalage de niveau 5. Ainsi, les niveaux 5 à 8 sont émis ISO_Level5_Lockcar tous ces niveaux sont accessibles en maintenant enfoncé le décalage de niveau 5 et une combinaison des autres touches de décalage (aucune pour toutes). Si vous ne souhaitez que le comportement de décalage et pas également le comportement de verrouillage si vous appuyez deux fois, vous pouvez faire une déclaration plus simple (à partir du même fichier):

// 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)"
};

Ajout de niveaux supplémentaires à une mise en page

Les mises en page Xkb sont assez modulaires. Vous pouvez inclure des dispositions existantes et les modifier. Nous pouvons donc choisir une disposition existante avec moins de 5 niveaux et y ajouter quelques niveaux.

Vous pouvez créer de nouvelles mises en page en copiant le fichier avec vos mises en page /usr/share/X11/xkb/symbols/, ou partout où vos outils Xkb recherchent des mises en page. Mais cela nécessite le privilège sudo, ce n'est donc pas la meilleure solution. Alternativement, vous pouvez copier la structure du répertoire de xkb/ et placer vos présentations dans le répertoire approprié sous xkb/, à savoir symbols/. Disons que vous avez créé un fichier xkb-tree/symbols/my-layouts. Pour utiliser les dispositions définies dans ce fichier, vous pouvez utiliser l' -print option de setxkbmap, puis diriger la sortie vers xkbcomp. Ce script wrapper prend les dispositions en entrée:

#!/bin/sh

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

En ce qui concerne le fichier avec la mise en page, disons que nous voulons étendre la mise en page «US international», qui utilise quatre niveaux. Tout d'abord, nous configurons les touches de décalage de niveau 3 et de niveau 5 de la même manière que 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)"
};

Maintenant, nous voulons ajouter quelques caractères supplémentaires. Prenons simplement les quatre premières clés des dispositions Qwerty comme exemple. Ces touches sont Qà R, qui correspondent <AD01>à <AD04>. Nous devons d'abord rendre les touches capables d'utiliser jusqu'à huit niveaux:

key.type[Group1] = "EIGHT_LEVEL";

Pour les quatre premiers niveaux, afin de ne pas les redéfinir, nous les mappons NoSymbol. Ensuite, nous ajoutons deux niveaux. Au niveau 5, nous ajoutons les flèches ←↓↑→(† 2). Au niveau 6, nous ajoutons les touches de direction. Notre mise en page finit par ressembler à ceci:

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
    ] };

};

Pour l'utiliser, nous pouvons utiliser le script wrapper que nous avons créé:

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

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

† 2: afin de trouver les noms symboliques utilisés par Xkb, recherchez un fichier nommé keysymdef.h. Il doit se trouver sous un répertoire nommé X11/. Vous pouvez également utiliser des noms Unicode, par exemple U2192pour U + 2192.

Guildenstern
la source
1
Merci d'avoir pris le temps de rédiger cette réponse. Je cherchais un moyen d'utiliser mes touches JKLI comme touches fléchées depuis un certain temps maintenant, donc cela était incroyablement pratique. Veuillez profiter de ces 50 points supplémentaires! (Je devrais pouvoir attribuer la prime demain.)
Glutanimate
1
Eh bien, merci, c'est une excellente réponse même si elle arrive un peu en retard, mais c'est exactement ce que je cherchais auparavant (mais maintenant GNOME ne prend pas en charge la définition du modificateur - mais tant qu'il fonctionne à l'aide de fichiers de configuration, tous est bien).
sup
8

Eh bien, après avoir creusé un peu:

(1) La clé pour choisir le 5ème niveau fait des trucs bizarres (concernant certaines mises en page en français) qui ne correspondent pas à ce que je voulais faire. Fondamentalement, il définit quelle clé va agir comme ISO_Level5_Shift. ISO_Level5_Shift est utilisé dans certaines dispositions obscures. Cette réponse est basée sur le nombre de résultats que Google donne lors de la recherche de "ISO_Level5_Shift" et sur ces liens .

(2) Il ne peut pas être utilisé pour extraire 6 symboles d'une clé physique. Une façon d'y parvenir est d'utiliser le fichier .xmodmap placé dans le répertoire $ HOME.

Tout d'abord, la commande

xmodmap -pm

donne les touches qui agissent comme divers modificateurs. Sur mon système, c'était comme suit:

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 doit être configuré pour utiliser 6 symboles avec une seule touche. Cela doit être placé dans le fichier .xmodmap:

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

Puis xmodmap -pm m'a donné:

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)

Où keycode 94 est la clé que j'ai choisie pour agir comme mod3. Les codes-clés de différentes clés physiques peuvent être trouvés avec l'outil de ligne de commande xev (il suffit de l'exécuter et d'appuyer sur différentes touches, les codes-clés s'afficheront).

Ensuite, si je place dans un fichier .xmodmap

keycode 54 = 1 2 3 4 5 6

ou courir

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

J'obtiens six symboles différents sur une même clé en utilisant altgr, shift et keycode 94 (c'est une clé inutile à côté de shift gauche sur ma disposition physique).

MISE À JOUR: si vous n'avez besoin que de cinq symboles, il est pratique de le configurer comme ceci:

keycode 54 = 1 2 3 3 5 6

Il m'arrive parfois que j'obtienne 4 au lieu de 3 sinon.

souper
la source