Si vous voulez lier seulement quelques séquences de la forme Super + x, Super + c, Super + v à d'autres séquences comme Ctrl + x, Ctrl + c, Ctrl + v, par exemple pour que (comme l'OP le souhaite) ces certaines séquences de Super-clés seront généralement mappées pour couper et coller sans affecter les autres utilisations de la Super clé sur votre système, il est possible d'utiliser uniquement l'extension XKB. La procédure ci-dessous décrit les étapes et donne deux exemples différents des détails de deux configurations de clavier de démarrage différentes; nous espérons que cela fournira suffisamment d'informations pour s'adapter à votre système. Il suppose que vous êtes à l'aise avec la création et la modification de fichiers sur votre système, y compris ceux qui se trouvent dans des emplacements système comme /usr/share/X11/xkb
.
Décidez où vous souhaitez que votre arborescence de configuration XKB réside. Trouvez d'abord le système. Il se trouve généralement dans / usr / share / X11 / xkb, et je ne sais pas trop comment le trouver s'il n'est pas là; vous pouvez simplement rechercher dans votre système des répertoires nommés "xkb". Quoi qu'il en soit, une fois que vous l'avez trouvé, vous pouvez soit modifier le système en place, soit utiliser n'importe quel répertoire de votre choix. L'avantage d'utiliser le répertoire système est que vous pouvez invoquer vos modifications beaucoup plus facilement, mais l'inconvénient est que les futures mises à jour du système peuvent écraser vos modifications (vous avez été averti). Dans tous les cas, tous les noms de fichiers mentionnés ci-après sont relatifs à ce répertoire, que j'appellerai en cas de besoin $ XKBLOCAL $, et toutes les commandes supposent que c'est votre répertoire actuel.
Déterminez quel "type" de clé XKB sont les clés x, c, v actuelles. La façon la plus simple de le faire est via la commande xkbcomp -a $DISPLAY - | grep -C 6 c,
(notez que la virgule est intentionnellement incluse dans le modèle). Dans mon premier exemple d'installation, cela produit:
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> {
alors que dans mon autre exemple de configuration, cela produit
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> {
Le résultat est que dans le premier exemple, les clés pertinentes sont de type "ALPHABETIC" tandis que dans le deuxième exemple, elles sont de type "FOUR_LEVEL". Selon la configuration de votre clavier, vous constaterez peut-être qu'ils sont d'un autre type. Dans ce qui suit, le type sera appelé $ TYPE $, que vous devez remplacer par la chaîne réelle ALPHABETIC ou autre dans les commandes ci-dessous.
Recherchez la définition de $ TYPE $ et copiez-la dans un nouveau fichier dans le répertoire $ XKBLOCAL $ / types. Voici une commande qui fait exactement cela: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Le nom du fichier "cutpaste" que j'ai choisi est arbitraire, utilisez le nom que vous voulez, mais notez que vous devrez vous référer systématiquement à ce fichier dans les étapes ultérieures. Dans la première configuration, ce fichier obtient le contenu
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
et dans l'autre exemple, il obtient le contenu
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";
};
Modifiez les types de fichiers / cutpaste pour faire deux choses: ajoutez un préambule et un postambule qui en font une clause XKB appropriée, et modifiez le nom du type et la définition de type pour ajouter un niveau supplémentaire produit par le modificateur correspondant à Super. Vous devriez vérifier ce que ce modificateur est sur votre système, il s'agit probablement de Mod4 tel qu'utilisé ci-dessous. Les modifications nécessaires doivent être évidentes à partir des deux exemples de versions finales de types / cutpaste, à savoir:
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";
};
};
et
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"';
};
};
Copiez les définitions de symboles clés qui ont été générées par grep dans la deuxième étape dans un deuxième nouveau fichier de symboles / coupe-pâte, et ajoutez un préambule et un postambule similaires, et modifiez les définitions pour utiliser les nouveaux types et ajoutez des actions à la définition pour gérer la clé souhaitée produite par les versions Super. Les résultats de ceci dans nos deux exemples sont:
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)]
};
};
et
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)]
};
};
Notez que dans le deuxième exemple, j'ai également supprimé certains des espaces (non significatifs) pour garder la longueur de la ligne sous un peu de contrôle.
Recherchez le nom de l'ensemble de règles que XKB utilise actuellement. C'est facile, c'est montré dans le résultat de setxkbmap -query
. Dans mon cas, c'était "evdev".
Copiez la version système de rules / evdev (ou quel que soit le nom de votre ensemble de règles) dans $ XKBLOCAL $ / rules / evdev et ajoutez des règles pointant vers les options que nous avons créées. Vous avez deux choix ici: vous pouvez copier tout evdev ou seulement les parties mentionnant le modèle de clavier, la disposition, la variante et les options que vous utilisez réellement. Bien sûr, si vous modifiez les fichiers système en place, vous n'avez pas besoin de faire de copie, juste d'éditer.
Dans ce cas, ce qui est ajouté est identique quelle que soit la configuration initiale du clavier, il n'y a donc qu'un seul exemple. Vous trouvez la section du fichier de règles qui commence par ! option = symbols
et ajoutez une ligne cutpaste:super = +cutpaste
à cette section, et vous trouvez également la section du fichier de règles qui commence par ! option = types
et une ligne cutpaste:super = +cutpaste
à cette section également.
Copiez la version système de evdev.lst et ajoutez une ligne pour votre nouvelle option. Notez que le nom de ce fichier correspond simplement au nom du fichier de règles avec .lst ajouté. Comme à l'étape précédente, vous pouvez copier l'intégralité du fichier ou uniquement la partie référencée par le modèle, la disposition, la variante et les options que vous utilisez. Il vous suffit de trouver la section de ce fichier qui commence par ! option
et d'ajouter une ligne comme celle-ci: cutpaste:super Add super equivalents of cut and paste operations
à cette section.
OK, maintenant tous les fichiers de configuration sont en place. Si vous avez modifié les fichiers système, vous pouvez maintenant invoquer votre nouvelle option avec setxkbmap -option cutpaste:super
. En revanche, si vous ne l'avez pas fait, vous devez indiquer à setxkbmap où se trouve votre répertoire $ XKBLOCAL $. Pire encore, le serveur ne sait pas non plus où se trouve ce répertoire, et setxkbmap ne le dit pas (ou peut-être pas, car finalement le serveur peut fonctionner sur une autre machine). Vous devez donc diriger la sortie de setxkbmap vers xkbcomp, et également indiquer à cette commande où se trouve votre répertoire $ XKBLOCAL. La ligne de commande complète est donc setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
J'espère que cela peut aider / intéresser quelqu'un, car la bonne documentation / référence XKB définitive est rare. Une référence très utile était http://madduck.net/docs/extending-xkb/ .