Ponowne mapowanie zarówno Caps Lock, jak i Shift + Caps Lock w xkb

13

Próbuję skonfigurować xkb tak, aby Caps Lock był mapowany na klawisz Compose, a Shift + Caps Lock działa jak tradycyjny Caps Lock. W nowym pliku o nazwie /usr/share/X11/xkb/symbols/gdwatson:

partial modifier keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ]
    };
};

Potem pobiegłem setxkbmap -symbols 'pc+us+gdwatson(compose)', co zakończyło się pomyślnie. Caps Lock działa jak Compose, ale Shift + Caps Lock działa jak Compose zamiast Caps Lock. xkbcomp :0.0ujawnia następujące:

key <CAPS> {
    type= "TWO_LEVEL",
    symbols[Group1]= [       Multi_key,       Multi_key ]
};

Odwzorowanie symboli na drugim poziomie jest z jakiegoś powodu powielaniem pierwszego, zamiast oddzielnej wartości, którą próbowałem mu nadać. Czy ktoś ma dość siły xkb-fu, aby powiedzieć mi, co zrobiłem źle lub jak to naprawić?

Grant Watson
źródło
1
Mogę pomóc ci to zrobić w Xmodmap, ale nie w xkb. Jeśli chcesz, odpowiedz pozytywnie (nie zapomnij napisać @mirabilosw odpowiedzi, więc to zauważam) w komentarzu, a następnie usunę ten komentarz i napiszę go jako odpowiedź (powinieneś również usunąć swoją odpowiedź na komentarz).
mirabilos
1
W pierwszej linii powinno partial modifier keysbyć partial modifier_keys? Bez tej zmiany setxkbmap -symbols 'pc+us+gdwatson(compose)'faktycznie wychodzi z błędem, ale wraz ze zmianą otrzymuję pożądany wynik xkbcomp :0.0. Jednak dostaję niepożądany efekt uboczny, że jednoczesne naciśnięcie Capslocka wprowadza mnie w tryb Capslock i komponuje tryb klawiszy.
billyjmc

Odpowiedzi:

11

To wydaje się osiągać to, czego szukasz.

partial modifier_keys
xkb_symbols "compose" {
    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Multi_key, Caps_Lock ],
        actions[Group1] = [ NoAction(), LockMods(modifiers=Lock) ]
    };
};

Następujące zasoby są nieocenione, gdy mamy do czynienia z XKB (dowiązałem do mirrorów tych stron WayBack Machine w celu zabezpieczenia na przyszłość):

billyjmc
źródło
Ponadto, jeśli default partial modifier_keyssetxkbmap -symbols 'pc+us+gdwatson(compose)'setxkbmap -symbols 'pc+us+gdwatson'
utworzysz