„1. Więc co robi modyfikator 5. poziomu? ”
Wybiera piąty poziom. Modyfikator drugiego poziomu (zwykłe przesunięcie) wybiera drugi poziom, a trzeci poziom wybiera trzeci poziom.
Powodem, dla którego modyfikator 5. poziomu wybiera piąty poziom zamiast czwartego poziomu (zaraz po modyfikatorze 3. poziomu) jest to, że te trzy modyfikatory można łączyć na różne sposoby, aby wybrać osiem różnych poziomów (w tym nie używać żadnego z modyfikatorów, który po prostu naciska klawisz bez takich modyfikatorów). Istnieje osiem kombinacji od 2 ↑ 3 = 8. Dla pierwszych dwóch modyfikatorów istnieją cztery kombinacje:
- Bez modyfikatorów (poziom 1)
- Modyfikator 2. poziomu, aka shift (poziom 2)
- Modyfikator 3. poziomu (poziom 3)
- 2. + 3. modyfikator (poziom 4)
Dodanie trzeciego modyfikatora (5 poziom) dodaje cztery kolejne poziomy.
„2. Jak mogę ustawić go tak, że mogę dostać 5 lub sześć różnych postaci z jednego klucza (zmodyfikowanej przez Shift Alt Gri Right
Ctrlna przykład)?”
Przede wszystkim potrzebujesz układu, który używa pięciu lub więcej znaków na klawisz. Możesz wybrać istniejący układ, ale jeśli chcesz po prostu dodać więcej poziomów do aktualnie używanego układu, może to nie być optymalne. Na przykład istnieje układ klawiatury Neo († 1), ale jest on „zoptymalizowany pod kątem języka niemieckiego”, więc nie jest tak świetny dla większości osób posługujących się językiem angielskim.
Mimo to warto pouczyć się, jakie klawisze Neo wybrał dla modyfikatora poziomu 5.
Neo najwyraźniej nazywa modyfikator poziomu 5 dla „Mod4”. Jak widać, używa klawisza po prawej stronie lewego klawisza Shift ( LSGT
) i prawego klawisza / AltGr
klawisza Alt . Jest to na klawiaturze europejskiej (105 klawiszy), która w porównaniu z klawiaturą amerykańską (104 klawisze) ma wąski lewy shift oraz wysoki i cienki klawisz powrotu. W przypadku układu klawiatury opartego na klawiaturze amerykańskiej konieczne może być wybranie innych klawiszy.
Wybór klawisza modyfikującego poziom 5
W odpowiedzi sup wybiera Xmodmap. W dzisiejszych czasach narzędzia takie jak Setxkbmap są zalecane zamiast Xmodmap. Xkb zawiera wiele predefiniowanych opcji, takich jak wybór modyfikatora poziomu 5. Jeśli skonsultujesz się z
man xkeyboard-config i lv5
szukasz, znajdziesz następujące opcje:
┌──────────────────────┬───────────────────────────────────────────────────┐
│ 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 │
└──────────────────────┴───────────────────────────────────────────────────┘
Udokumentowane opcje to LSGT
klucz, prawy klawisz Alt, prawy klawisz Windows i lewy klawisz Windows. Jak widzieliśmy, Neo korzysta z dwóch pierwszych opcji.
Powiedz, że chcesz użyć tej lv5:ralt_switch_lock
opcji z pewnym układem. To polecenie konfiguruje us
układ za pomocą tego klawisza modyfikującego poziom 5:
setxkbmap -option "lv5:ralt_switch_lock" us
Tak więc dla każdej z opcji, które są udokumentowane man xkeyboard-config
, użyj tego jako argumentu -option
podczas korzystania z Setxkbmap.
Jeśli te opcje nie są wystarczające i chcesz zdefiniować inny klucz, który będzie modyfikatorem poziomu 5, warto przyjrzeć się deklaracjom tych opcji. Wydaje się, że są w środku
/usr/share/X11/xkb/symbols/level5
. Deklaracja dla
lv5:ralt_switch_lock
wygląda następująco:
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 ]
};
};
Prawa strona symbols[Group1]
deklaruje, jaki klucz lub znak powinien generować każdy poziom klucza. Wykorzystuje wszystkie osiem możliwych poziomów, ponieważ ma blokować modyfikator poziomu 5, gdy jest naciśnięty razem z innym klawiszem Shift poziomu 5. Tak więc emitowane są poziomy 5–8,
ISO_Level5_Lock
ponieważ dostęp do wszystkich tych poziomów uzyskuje się przez przytrzymanie klawisza Shift poziomu 5 i kombinacji innych klawiszy Shift (brak dla wszystkich). Jeśli chcesz tylko zachowania shift, a nie blokowania dwukrotnego naciśnięcia, możesz złożyć prostszą deklarację (z tego samego pliku):
// 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)"
};
Dodawanie dodatkowych poziomów do układu
Układy Xkb są dość modułowe. Możesz dołączyć istniejące układy i zmienić je. Możemy więc wybrać istniejący układ z mniej niż 5 poziomami i dodać do niego kilka poziomów.
Możesz tworzyć nowe układy, kopiując plik ze swoimi układami do
/usr/share/X11/xkb/symbols/
, lub gdziekolwiek to jest, że twoje narzędzia Xkb szukają układów. Ale to wymaga uprawnień sudo, więc nie jest to najlepsze rozwiązanie. Alternatywnie możesz skopiować strukturę katalogów xkb/
i umieścić swoje układy w odpowiednim katalogu xkb/
, mianowicie
symbols/
. Powiedzmy, że utworzyłeś plik xkb-tree/symbols/my-layouts
. Aby użyć układów zdefiniowanych w tym pliku, możesz użyć -print
opcji, setxkbmap
a następnie potokować dane wyjściowe xkbcomp
. Ten skrypt otoki przyjmuje układy jako dane wejściowe:
#!/bin/sh
# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
-print |
xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"
Jeśli chodzi o plik z układem, powiedzmy, że chcemy rozszerzyć układ „US international”, który wykorzystuje cztery poziomy. Po pierwsze, ustawiamy klawisze Shift poziomu 3 i poziomu 5 w taki sam sposób, jak 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)"
};
Teraz chcemy dodać dodatkowe postacie. Jako przykładu wykorzystajmy cztery pierwsze klucze układów Qwerty. Klawisze te są Q
na R
, które odpowiadają <AD01>
na <AD04>
. Najpierw musimy sprawić, aby klucze mogły korzystać z maksymalnie ośmiu poziomów:
key.type[Group1] = "EIGHT_LEVEL";
Dla pierwszych czterech poziomów, aby ich nie przedefiniować, mapujemy je na NoSymbol
. Następnie dodajemy dwa poziomy. Na poziomie 5 dodajemy strzałki ←↓↑→
(† 2). Na poziomie 6 dodajemy klawisze kierunkowe. Nasz układ wygląda następująco:
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
] };
};
Aby go użyć, możemy użyć skryptu opakowania, który wykonaliśmy:
./setxkbmap-wrapper "my-layouts(mine)"
† 1: Neo jest de(neo)
w Xkb; setxkbmap "de(neo)"
.
† 2: Aby znaleźć nazwy symboliczne używane przez Xkb, wyszukaj plik o nazwie keysymdef.h
. Powinien znajdować się w katalogu o nazwie X11/
. Możesz także użyć nazw Unicode, na przykład U2192
dla U + 2192.