“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.
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 / AltGr
tasto 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 lv5
troverai 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 LSGT
chiave, 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_lock
opzione con alcuni layout. Questo comando imposta il us
layout con questo tasto modificatore di livello 5:
setxkbmap -option "lv5:ralt_switch_lock" us
Quindi, per una qualsiasi delle opzioni documentate man xkeyboard-config
, -option
usalo 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_lock
assomiglia 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_Lock
poiché 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 setxkbmap
e 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 Q
a 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 U2192
per U + 2192.