Ponowne mapowanie Caps Lock za pomocą xmodmap nie działa

10

Podczas programowania lubię zamieniać te klucze:

EscTab CtrlCapsLock

W ~/.xmodmapOkreśliłem następujące ponowne mapowania:

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab

EscapeI Tabklucze swap, nie ma problemu, ale zamiast Caps_Locki Control_Lzamiana, oba te klawisze staje Caps_Lock.

Cokolwiek próbuję zrobić, klawisze Control nie są przypisywane Caps_Lock(kod klucza 66). Jeśli opuszczę keycode 66 =, klucz nie jest przypisany, ale kiedy go przypisuję Control_Llub Control_R, po prostu nie działa. Ale jeśli przypiszę jakiś inny klucz, na przykład, keycode 66 = Tabzostanie on przypisany, nie ma problemu.

To tak, jakby xmodmap po prostu nie chce zamiany klawiszy Caps Lock i Control. Naprawdę frustrujące. Każda pomoc / wskazówki byłyby naprawdę pomocne.

PS: Używam Archlinux.

Aby James
źródło

Odpowiedzi:

8

Xmodmap (1) Strona człowiek ma dokładnie ten przykład dla

   !
   ! Swap Caps_Lock and Control_L
   !
   remove Lock = Caps_Lock
   remove Control = Control_L
   keysym Control_L = Caps_Lock
   keysym Caps_Lock = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

ale jeśli chcesz zakończyć to tak, jak zacząłeś, myślę, że musisz dodać przynajmniej linie removeiadd

   remove Lock = Caps_Lock
   remove Control = Control_L
   keycode 37 = Caps_Lock
   keycode 66 = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

Zgaduję, że tak jest w oparciu o ten akapit

   add MODIFIERNAME = KEYSYMNAME ...
           This adds all keys containing the given keysyms  to  the  indi‐
           cated  modifier  map.  The keysym names are evaluated after all
           input expressions are read to make it easy to write expressions
           to swap keys (see the EXAMPLES section).

co sprawia, że ​​brzmi to tak, jakby zmiany modyfikatora (shift, kontrola itp.) nie były stosowane, dopóki tego nie uruchomisz.

(I logicznie to samo z remove)

Mikel
źródło
Przeczytałem stronę podręcznika i ponownie przypisałem klawisze Caps_Lock i Control_L zgodnie z przykładem. Byłem jednak ciekawy, dlaczego ponowne mapowanie kluczy w sposób opisany w OP nie działa. Czy to błąd czy coś takiego?
Aby James
Wydaje się, że tak właśnie powinno działać. Zobacz moją zaktualizowaną odpowiedź.
Mikel
4

Luźno powiązana odpowiedź: chciałem ponownie przypisać klawisz Caps Lock do lewej kontrolki, pozostawiając rzeczywistą lewą kontrolkę nietkniętą. Strona podręcznika użytkownika xmodmap oferuje również rozwiązanie:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
Clément B.
źródło