Se vuoi associare solo alcune sequenze del modulo Super + x, Super + c, Super + v ad altre sequenze come Ctrl + x, Ctrl + c, Ctrl + v, ad esempio in modo che (come desiderato dall'OP) queste particolari sequenze di Super-key verranno generalmente mappate per tagliare e incollare senza influenzare altri usi della Super-chiave sul sistema, è possibile utilizzare solo l'estensione XKB. La procedura seguente delinea i passaggi e fornisce due diversi esempi dei dettagli per due diverse configurazioni iniziali della tastiera; si spera che fornirà informazioni sufficienti per adattarsi al proprio sistema. Presuppone che tu abbia dimestichezza con la creazione e la modifica di file sul tuo sistema, inclusi quelli in posizioni di sistema come /usr/share/X11/xkb
.
Decidi dove vuoi che risieda l'albero di configurazione XKB. Per prima cosa trova quello di sistema. Di solito è in / usr / share / X11 / xkb e non sono del tutto sicuro di come trovarlo se non è lì; potresti semplicemente cercare nel tuo sistema directory denominate "xkb". In ogni caso, una volta trovato, è possibile modificare il sistema in atto oppure utilizzare qualsiasi directory di propria scelta. Il vantaggio di utilizzare la directory di sistema è che puoi invocare molto più facilmente le tue modifiche, ma lo svantaggio è che i futuri aggiornamenti di sistema potrebbero sovrascrivere le tue modifiche (sei stato avvisato). In ogni caso, tutti i nomi dei file citati di seguito sono relativi a questa directory, a cui farò riferimento quando necessario come $ XKBLOCAL $ e tutti i comandi presuppongono che sia la directory corrente.
Determina quale "tipo" XKB di chiave sono i tasti x, c, v correnti. Il modo più semplice per farlo è tramite il comando xkbcomp -a $DISPLAY - | grep -C 6 c,
(nota che la virgola è intenzionalmente inclusa nel modello). Nel mio primo esempio di installazione, questo produce:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
mentre nel mio altro esempio di installazione questo produce
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
Il risultato è che nel primo esempio, i tasti rilevanti sono di tipo "ALPHABETIC" mentre nel secondo esempio sono di tipo "FOUR_LEVEL". A seconda della configurazione della tastiera, potresti scoprire che sono del tutto di qualche altro tipo. Di seguito, il tipo verrà indicato come $ TYPE $, che è necessario sostituire con la stringa ALPHABETIC effettiva o qualsiasi altra cosa nei comandi seguenti.
Trova la definizione di $ TYPE $ e copialo in un nuovo file nella directory $ XKBLOCAL $ / types. Ecco un comando che fa proprio questo: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Il nome del file "cutpaste" che ho scelto è arbitrario, usa il nome che preferisci, ma nota che dovrai fare riferimento a questo file in modo coerente nei passaggi successivi. Nella prima installazione, questo file ottiene il contenuto
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
e nell'altro esempio ottiene il contenuto
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Modifica i tipi di file / cutpaste per fare due cose: aggiungi un preambolo e postamble che lo rendono una clausola XKB corretta e modifica il nome del tipo e la definizione del tipo per aggiungere un ulteriore livello prodotto dal modificatore corrispondente a Super. Dovresti controllare quale sia quel modificatore sul tuo sistema, è probabilmente Mod4 come usato di seguito. Le modifiche necessarie dovrebbero essere evidenti dalle due versioni finali di esempio di tipi / pasta, ovvero:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
e
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Copia le definizioni dei simboli chiave che sono state emesse da grep nel secondo passaggio in un secondo nuovo file simboli / cutpaste, aggiungi preamboli e postamble simili e modifica le definizioni per utilizzare i nuovi tipi e aggiungere azioni alla definizione per gestire la chiave desiderata prodotto dalle versioni Super. I risultati di questo nei nostri due esempi sono:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
e
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Si noti che nel secondo esempio ho eliminato anche alcuni spazi (non significativi) per mantenere un po 'di controllo la lunghezza della linea.
Trova il nome del set di regole che XKB sta attualmente utilizzando. È facile, è mostrato nel risultato di setxkbmap -query
. Nel mio caso, era "evdev".
Copia la versione di sistema di rules / evdev (o qualunque sia il nome del tuo set di regole) in $ XKBLOCAL $ / rules / evdev e aggiungi le regole che puntano alle opzioni che abbiamo creato. Hai due scelte qui: puoi copiare tutto di evdev o solo le parti che menzionano il modello, il layout, la variante e le opzioni della tastiera che stai effettivamente utilizzando. Naturalmente, se si stanno modificando i file di sistema in atto, non è necessario eseguire alcuna copia, ma solo modificarli.
In questo caso, ciò che viene aggiunto è identico indipendentemente dall'impostazione iniziale della tastiera, quindi c'è solo un esempio. Trovi la sezione del file delle regole che inizia con ! option = symbols
e aggiungi una riga cutpaste:super = +cutpaste
a quella sezione e trovi anche la sezione del file delle regole che inizia con ! option = types
e una linea anche cutpaste:super = +cutpaste
in quella sezione.
Copia la versione di sistema di evdev.lst e aggiungi una riga per la tua nuova opzione. Si noti che il nome di questo file corrisponde semplicemente al nome del file delle regole con .lst aggiunto. Come nel passaggio precedente, è possibile copiare l'intero file o solo la parte a cui fanno riferimento il modello, il layout, la variante e le opzioni che si stanno utilizzando. Devi solo trovare la sezione di questo file che inizia con ! option
e aggiungere una linea come questa: cutpaste:super Add super equivalents of cut and paste operations
a quella sezione.
OK, ora sono presenti tutti i file di configurazione. Se hai modificato i file di sistema, ora puoi invocare la tua nuova opzione con setxkbmap -option cutpaste:super
. D'altra parte, in caso contrario, devi far sapere a setxkbmap dove si trova la tua directory $ XKBLOCAL $. Quel che è peggio, il server non sa nemmeno dove sia quella directory, e setxkbmap non lo fa (o forse non può, poiché alla fine il server potrebbe essere in esecuzione su un altro computer) lo dice. Quindi devi reindirizzare l'output di setxkbmap su xkbcomp e dire anche a quel comando dove si trova la tua directory $ XKBLOCAL. La riga di comando completa è quindi setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Speriamo che questo sia di aiuto / interesse per qualcuno, dato che una buona documentazione / riferimento XKB definitivo è scarsa. Un riferimento molto utile è stato http://madduck.net/docs/extending-xkb/ .