Cosa fa “Chiave per scegliere il 5 ° livello” nelle proprietà della tastiera di gnome?


18

C'è un'opzione per specificare un tasto da utilizzare per accedere al 5 ° livello sulla tastiera in gnome-keyboard-properties("Tastiera" in Hardware nelle impostazioni di sistema):

Screenshot di detta finestra di dialogo

Ma se imposto il 5 ° livello su AltGre il terzo livello su Right Ctrle se imposto il tasto 54 come segue:

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

Ottengo i seguenti risultati premendo diverse varianti:

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. Quindi cosa fa il modificatore di 5 ° livello?

  2. Come posso impostarlo in modo da poter ottenere 5 o sei caratteri diversi da una singola chiave (modificata da Shift, Alt Gre Right Ctrlper esempio)?

Risposte:


15

“1. Quindi cosa fa il modificatore di 5 ° livello? ”

Sceglie il quinto livello. Il modificatore di 2 ° livello (solo spostamento regolare) sceglie il secondo livello e il 3 ° livello sceglie il terzo livello.

Il motivo per cui il modificatore di 5 ° livello sceglie il quinto livello anziché il quarto livello (subito dopo il modificatore di terzo livello) è che questi tre modificatori possono essere combinati in modi diversi per scegliere otto livelli diversi (questo include il non utilizzo di nessuno dei modificatori, che sta semplicemente premendo un tasto senza tali modificatori). Esistono otto combinazioni da 2 ↑ 3 = 8. Per i primi due modificatori ci sono quattro combinazioni:

  • Nessun modificatore (livello 1)
  • Modificatore di 2 ° livello, aka shift (livello 2)
  • Modificatore di 3 ° livello (livello 3)
  • 2 ° + 3 ° modificatore (livello 4)

L'aggiunta del terzo modificatore (5 ° livello) aggiunge altri quattro livelli.

“2. Come posso impostarlo in modo da poter ottenere 5 o sei caratteri diversi da un singolo tasto (modificato da Shift Alt Gre , Right Ctrlad esempio)? ”

Innanzitutto è necessario un layout che utilizza cinque o più caratteri per chiave. È possibile scegliere un layout esistente, ma se si desidera semplicemente aggiungere più livelli al layout attualmente in uso, potrebbe non essere ottimale. Ad esempio, esiste il layout della tastiera Neo († 1), ma è "ottimizzato per la lingua tedesca", quindi non eccezionale per la maggior parte degli altoparlanti inglesi.

Tuttavia, potrebbe essere istruttivo dare un'occhiata a quali chiavi Neo ha scelto per il modificatore di livello 5.

Neo layout

Apparentemente Neo chiama il modificatore di livello 5 per "Mod4". Come puoi vedere, usa il tasto a destra del tasto Maiusc sinistro ( LSGT) e il tasto / AltGrtasto alt destro . Questo è su una tastiera europea (105 tasti) che rispetto alla tastiera americana (104 tasti) ha uno spostamento sinistro stretto e un tasto di ritorno alto e sottile. Per un layout di tastiera basato sulla tastiera degli Stati Uniti, potrebbe essere necessario, o preferire, scegliere altri tasti.

Scelta di un tasto modificatore di livello 5

Nella risposta di sup, sceglie di usare Xmodmap. Oggi strumenti come Setxkbmap sono raccomandati su Xmodmap. Xkb include molte opzioni predefinite per cose come la scelta del modificatore di livello 5. Se consulti man xkeyboard-config e cerchi lv5troverai queste opzioni:

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

Quindi le opzioni documentate sono la LSGTchiave, il tasto alt destro, il tasto Windows destro e il tasto Windows sinistro. Come abbiamo visto, Neo utilizza le prime due opzioni.

Supponi di voler utilizzare l' lv5:ralt_switch_lockopzione con alcuni layout. Questo comando imposta il uslayout con questo tasto modificatore di livello 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Quindi, per una qualsiasi delle opzioni documentate man xkeyboard-config, -optionusalo come argomento quando usi Setxkbmap.

Nel caso in cui queste opzioni non siano sufficienti e si desideri definire un'altra chiave come modificatore di livello 5, è istruttivo esaminare le dichiarazioni per queste opzioni. Sembrano essere dentro /usr/share/X11/xkb/symbols/level5. La dichiarazione per lv5:ralt_switch_lockassomiglia a questo:

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

Il lato destro di symbols[Group1]dichiara quale chiave o carattere dovrebbe produrre ogni livello della chiave. Questo utilizza tutti gli otto livelli possibili poiché dovrebbe bloccare il modificatore di livello 5 quando viene premuto insieme ad un altro tasto shift di livello 5. Quindi vengono emessi i livelli 5-8 ISO_Level5_Lockpoiché si accede a tutti questi livelli tenendo premuto il turno di livello 5 e una combinazione degli altri tasti di spostamento (nessuno per tutti). Se si desidera solo il comportamento a turni e non anche il comportamento di blocco se due volte, è possibile effettuare una dichiarazione più semplice (dallo stesso file):

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

Aggiunta di livelli extra a un layout

I layout di Xkb sono piuttosto modulari. È possibile includere layout esistenti e modificarli. Quindi possiamo scegliere un layout esistente con meno di 5 livelli e aggiungerne alcuni.

Puoi creare nuovi layout copiando il file con i tuoi layout /usr/share/X11/xkb/symbols/o ovunque gli strumenti Xkb cerchino i layout. Ma questo richiede il privilegio di sudo, quindi non è la soluzione migliore. In alternativa è possibile copiare la struttura della directory xkb/ e inserire i layout nella directory appropriata xkb/, vale a dire symbols/. Quindi supponiamo che tu abbia creato un file xkb-tree/symbols/my-layouts. Per utilizzare i layout definiti in questo file, è possibile utilizzare l' -print opzione setxkbmape quindi reindirizzare l'output xkbcomp. Questo script wrapper accetta i layout come input:

#!/bin/sh

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

Per quanto riguarda il file con il layout, diciamo che vogliamo espandere il layout "US international", che utilizza quattro livelli. Innanzitutto impostiamo i tasti shift di livello 3 e 5 allo stesso modo di 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)"
};

Ora vogliamo aggiungere alcuni personaggi extra. Usiamo solo le prime quattro chiavi dei layout Qwerty come esempio. Questi tasti sono Qa R, che corrispondono a <AD01>a <AD04>. Per prima cosa dobbiamo rendere le chiavi in ​​grado di utilizzare fino a otto livelli:

key.type[Group1] = "EIGHT_LEVEL";

Per i primi quattro livelli, al fine di non ridefinirli, li mappiamo NoSymbol. Quindi aggiungiamo due livelli. Al livello 5 aggiungiamo le frecce ←↓↑→(† 2). Al livello 6 aggiungiamo i tasti di direzione. Il nostro layout si presenta così:

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

};

Per usarlo possiamo usare lo script wrapper che abbiamo creato:

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

† 1: Neo è de(neo)in Xkb; setxkbmap "de(neo)".

† 2: per trovare i nomi simbolici utilizzati da Xkb, cerca un file chiamato keysymdef.h. Dovrebbe trovarsi in una directory denominata X11/. Puoi anche usare i nomi Unicode, ad esempio U2192per U + 2192.


1
Grazie per il tempo dedicato a scrivere questa risposta. Stavo cercando un modo per usare i miei tasti JKLI come tasti freccia per un po 'di tempo, quindi questo mi è stato incredibilmente utile. Goditi questi 50 punti extra! (Dovrei essere in grado di assegnare la taglia domani.)
Glutanimate,

1
Bene, grazie, questa è un'ottima risposta anche se arriva un po 'tardi ma è esattamente quello che stavo cercando indietro di (ma ora GNOME in realtà non supporta l'impostazione del modificatore - ma finché funziona usando i file di configurazione, tutto è bene).
sup

8

Bene, dopo un po 'di scavo:

(1) La chiave per scegliere il 5 ° livello fa cose strane (riguardo ad alcuni layout francesi) che non sono rilevanti per quello che volevo fare. Fondamentalmente imposta quale chiave funzionerà come ISO_Level5_Shift. ISO_Level5_Shift è utilizzato in alcuni layout oscuri. Questa risposta si basa sul numero di risultati forniti da Google durante la ricerca di "ISO_Level5_Shift" e su questi collegamenti .

(2) Non può essere usato per ottenere 6 simboli da una chiave fisica. Un modo per raggiungere questo obiettivo è con l'uso del file .xmodmap collocato nella directory $ HOME.

Primo, comando

xmodmap -pm

indica quali simboli chiave agiscono come vari modificatori. Sul mio sistema era come segue:

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 deve essere configurato per utilizzare 6 simboli con un tasto. Questo deve essere inserito nel file .xmodmap:

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

Quindi xmodmap -pm mi ha dato:

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)

Dove keycode 94 è la chiave che ho scelto di agire come mod3. I codici chiave di vari tasti fisici possono essere trovati con lo strumento da riga di comando xev (basta eseguirlo e premere vari tasti, verranno visualizzati i codici chiave).

Quindi, se inserisco il file .xmodmap

keycode 54 = 1 2 3 4 5 6

o corri

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

Ottengo sei simboli diversi da una chiave usando Altgr, Shift e Keycode 94 (è una chiave inutile accanto allo spostamento a sinistra sul mio layout fisico).

AGGIORNAMENTO: se sono necessari solo cinque simboli, è utile configurarlo in questo modo:

keycode 54 = 1 2 3 3 5 6

A volte mi capita di ottenere 4 invece di 3 altrimenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.