Problem z mapowaniem klawiszy podczas pracy z Emacsem i Openboxem


17

Mam klawiaturę Apple i musiałem zmienić mapowanie klawiszy, aby uczynić mod-4klawisz pierwszym klawiszem po lewej stronie Spacepaska, do którego używam podczas pracy z Emacsem. Poniższy skrypt działał dobrze, kiedy korzystałem z menedżera okien dwm, ale po przejściu na Openbox odkryłem, że zamiast zamiany kodów klawiszy między opcją a klawiszami poleceń, oba klucze robią to samo.

Jedną dziwną rzeczą, którą zauważyłem, była nowa konfiguracja, kiedy showkeykliknąłem Uruchom i nacisnąłem klawisze opcji i poleceń, dostaję odpowiednio 56 i 125, ale te klawisze w ogóle nie działają po wstawieniu ich do poniższego skryptu zamiast 64 133

Muszę przyznać, że stworzyłem poniższy skrypt, ciągle go ulepszając, aż zadziałał, aby istniał o wiele lepszy sposób.

.xmodmap

# switch alt and command...the switch is not being done properly
xmodmap -e "keycode 64 = Alt_L"
xmodmap -e "keycode 133 = Meta_L"

# remap of mod 4
xmodmap -e "clear Mod4"
xmodmap -e "add Mod4 = Super_L"

Aktualizacja

Przyzwyczaiłem się do poprzedniej konfiguracji klawiatury i zrezygnowałem z próby jej ulepszenia. Niestety, po niedawne Uruchom ponownie CapsLock, aby Ctrlnie pracował tak jestem tutaj ponownie.

Tym razem zamiast mapowania użytego powyżej, uruchomiłem xmodmap -pke > ~/.xmodi poprawiłem tam klucze (co jest znacznie łatwiejsze).

Jednak nadal nie wszystko jest w porządku. Te CapsLockfunkcje jeszcze tak normalnie, z wyjątkiem, gdy xevprowadzony jest komenda, to zwraca następujące która wydaje się pokazać poprawnego odwzorowania:

# caplock
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4858000, (57,-31), root:(426,402),
state 0x2, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes: 
XFilterEvent returns: False

# ctrl-L
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4805947, (686,148), root:(1055,581),
state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

# Alt-L
KeyPress event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4555825, (-158,-649), root:(959,133),
state 0x0, keycode 64 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

# Super-L
KeyRelease event, serial 40, synthetic NO, window 0x2200001,
root 0x156, subw 0x0, time 4920564, (-63,169), root:(306,602),
state 0x40, keycode 133 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

4
Na komputerach PC (nie wiem, czy dotyczy to również komputerów Mac) showkeynie wyświetla tych samych kodów, których używa X. Uruchom, xevaby zobaczyć kody klawiszy X i ich działania. Pokaż nam dane wyjściowe xmodmap -pmi wyjściowe xevpo naciśnięciu każdego z zaangażowanych klawiszy.
Gilles „SO- przestań być zły”

Dodałem powyższą aktualizację dla polecenia xmodmap -pm
Chris

Możesz rzucić okiem na wiki.archlinux.org/index.php/Apple_Keyboard i help.ubuntu.com/community/AppleKeyboard . Podsumowując, możesz powiedzieć sterownikowi klawiatury w jądrze, aby zachowywał się inaczej, niż
hakować

Jeśli działało to w DWM, domyślam się, że ~/.config/openbox/rc.xmlproblemem jest konflikt .
MajorBriggs,

Czy rozważałeś użycie udev do mapowania kluczy zamiast xmodmap? udev wymagałby tylko pliku hwdb do zmiany mapowania scancodes na określone kody.
Centimane

Odpowiedzi:


1

Prawdopodobnie musisz umieścić następujące na początku ~/.xmod

remove Lock = Caps_Lock
remove Control = Control_L
remove Mod1 = Alt_L Meta_L
remove Mod4 = Super_L Hyper_L

I następujące na dole ~/.xmod

add Control = Control_L
add Mod1 = Alt_L Meta_L
add Mod4 = Super_L Hyper_L

Spowoduje to zaktualizowanie systemu w celu rozpoznania charakteru modyfikatora tych kluczy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.