Jeśli chcesz powiązać tylko kilka sekwencji w postaci Super + x, Super + c, Super + v z innymi sekwencjami, takimi jak Ctrl + x, Ctrl + c, Ctrl + v, na przykład, aby (zgodnie z życzeniem OP) te poszczególne sekwencje superkluczy będą na ogół mapowane do wycinania i wklejania bez wpływu na jakiekolwiek inne użycie klawisza Super w twoim systemie, możliwe jest użycie tylko rozszerzenia XKB. Poniższa procedura przedstawia kroki i podaje dwa różne przykłady szczegółów dla dwóch różnych początkowych konfiguracji klawiatury; mam nadzieję, że dostarczy wystarczających informacji, aby dostosować się do twojego systemu. Zakłada, że nie masz problemów z tworzeniem i edycją plików w systemie, w tym plików w lokalizacjach systemowych, takich jak/usr/share/X11/xkb
.
Zdecyduj, gdzie ma się znajdować drzewo konfiguracji XKB. Najpierw znajdź system pierwszy. Zazwyczaj jest w / usr / share / X11 / xkb i nie jestem pewien, jak go znaleźć, jeśli go nie ma; możesz po prostu przeszukać swój system w poszukiwaniu katalogów o nazwie „xkb”. W każdym razie, gdy go znajdziesz, możesz albo zmodyfikować system jeden na miejscu, albo możesz użyć dowolnego wybranego katalogu. Zaletą korzystania z katalogu systemowego jest to, że można łatwiej wywoływać zmiany, ale wadą jest to, że przyszłe aktualizacje systemu mogą zastąpić zmiany (ostrzeżenie). W każdym razie wszystkie nazwy plików wymienione poniżej odnoszą się do tego katalogu, do którego będę się odwoływać w razie potrzeby jako $ XKBLOCAL $, a wszystkie polecenia zakładają, że to twój bieżący katalog.
Określić, jaki „typ” klucza XKB są obecne klucze x, c, v. Najłatwiej to zrobić za pomocą polecenia xkbcomp -a $DISPLAY - | grep -C 6 c,
(pamiętaj, że przecinek jest celowo zawarty we wzorcu). W mojej pierwszej przykładowej konfiguracji daje to:
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> {
podczas gdy w moim innym przykładzie konfiguracja ta powoduje
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> {
Wynik jest taki, że w pierwszym przykładzie odpowiednie klucze są typu „ALPHABETIC”, podczas gdy w drugim przykładzie są typu „FOUR_LEVEL”. W zależności od konfiguracji klawiatury może się okazać, że są one innego rodzaju. W dalszej części typ będzie nazywany $ TYPE $, który należy zastąpić rzeczywistym łańcuchem ALPHABETIC lub jakimkolwiek innym poleceniem poniżej.
Znajdź definicję $ TYPE $ i skopiuj ją do nowego pliku w katalogu $ XKBLOCAL $ / types. Oto polecenia, które nie tylko, że: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Nazwa pliku „wklejanie”, który wybrałem, jest dowolna, użyj dowolnej nazwy, ale pamiętaj, że będziesz musiał odwoływać się do tego pliku konsekwentnie w późniejszych krokach. W pierwszej instalacji ten plik pobiera zawartość
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
aw innym przykładzie pobiera treść
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";
};
Przeprowadź edycję typów plików / wklejania, aby zrobić dwie rzeczy: dodaj preambułę i postamble, dzięki czemu będzie to właściwa klauzula XKB, i zmień nazwę typu i definicję typu, aby dodać jeszcze jeden poziom wytwarzany przez modyfikator odpowiadający Super. Powinieneś sprawdzić, jaki modyfikator znajduje się w twoim systemie, prawdopodobnie jest to Mod4, jak zastosowano poniżej. Niezbędne modyfikacje powinny wynikać z dwóch przykładowych ostatecznych wersji typów / pasty, a mianowicie:
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";
};
};
i
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"';
};
};
Skopiuj definicje symboli klucza, które zostały wyprowadzone przez grep w drugim kroku, do drugiego nowego symbolu pliku / wklejania i dodaj podobną preambułę i postamble, a także zmodyfikuj definicje, aby używać nowych typów i dodaj działania do definicji, aby obsłużyć żądany klucz wyprodukowane przez wersje Super. Rezultaty tego w naszych dwóch przykładach są następujące:
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)]
};
};
i
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)]
};
};
Zauważ, że w drugim przykładzie wycisnąłem także trochę (nieistotnych) białych znaków, aby zachować nieco kontrolę nad długością linii.
Znajdź nazwę zestawu reguł, z których obecnie korzysta XKB. To proste, widać to w wyniku setxkbmap -query
. W moim przypadku było to „evdev”.
Skopiuj wersję systemową rules / evdev (lub jakąkolwiek inną nazwę zestawu reguł) do $ XKBLOCAL $ / rules / evdev i dodaj reguły wskazujące na opcje, które stworzyliśmy. Masz tutaj dwie możliwości: możesz skopiować wszystkie evdev lub tylko fragmenty wspominające model klawiatury, układ, wariant i opcje, których faktycznie używasz. Oczywiście, jeśli modyfikujesz pliki systemowe na miejscu, nie musisz kopiować, tylko edytować.
W tym przypadku dodawane elementy są identyczne niezależnie od początkowej konfiguracji klawiatury, więc jest tylko jeden przykład. Znajdziesz sekcję pliku reguł, która zaczyna się od, ! option = symbols
i dodajesz linię cutpaste:super = +cutpaste
do tej sekcji, a także sekcję pliku reguł, który zaczyna się od, ! option = types
oraz linię cutpaste:super = +cutpaste
do tej sekcji.
Skopiuj wersję systemową evdev.lst i dodaj wiersz dla nowej opcji. Zauważ, że nazwa tego pliku po prostu odpowiada nazwie pliku reguł z dołączonym .lst. Podobnie jak w poprzednim kroku, możesz skopiować cały plik lub tylko część, do której odnosi się model, układ, wariant i używane opcje. Musisz tylko znaleźć sekcję tego pliku, która zaczyna się od ! option
i dodać taką linię: cutpaste:super Add super equivalents of cut and paste operations
do tej sekcji.
OK, teraz wszystkie pliki konfiguracyjne są na miejscu. Jeśli zmodyfikowałeś pliki systemowe, możesz teraz wywołać nową opcję za pomocą setxkbmap -option cutpaste:super
. Z drugiej strony, jeśli tego nie zrobiłeś, musisz poinformować setxkbmap, gdzie znajduje się twój katalog $ XKBLOCAL $. Co gorsza, serwer też nie wie, gdzie jest ten katalog, a setxkbmap nie (lub może nie może, ponieważ ostatecznie serwer może działać na innym komputerze) tego nie mówi. Więc musisz przesłać dane wyjściowe setxkbmap do xkbcomp, a także powiedzieć tej komendzie, gdzie jest twój katalog $ XKBLOCAL. Pełna linia poleceń to dlatego setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Mam nadzieję, że jest to pomocne / interesujące dla kogoś, ponieważ dobra ostateczna dokumentacja / referencje XKB są rzadkie. Jednym z bardzo pomocnych odniesień był http://madduck.net/docs/extending-xkb/ .