Keymapping-Problem bei der Arbeit mit Emacs und Openbox

17

Ich habe eine Apple-Tastatur und musste die Tasten neu zuordnen, damit die mod-4Taste die erste Taste links in der SpaceLeiste ist, wenn ich mit Emacs arbeite. Das folgende Skript hat gut funktioniert, als ich den dwm-Fenstermanager verwendet habe, aber nach dem Wechsel zu Openbox habe ich festgestellt, dass beide Tasten dasselbe tun, anstatt die Schlüsselcodes zwischen den Options- und Befehlstasten zu tauschen.

Eine seltsame Sache, die mir aufgefallen ist, war das neue Setup, als ich auf "Ausführen" geklickt showkeyund die Options- und Befehlstasten gedrückt habe, die mir 56 bzw. 125 angezeigt werden. Diese Tasten funktionieren jedoch überhaupt nicht, wenn sie in das folgende Skript anstelle der Tasten "64" und "125" eingefügt werden 133.

Ich muss zugeben, dass ich das folgende Skript erstellt habe, indem ich es kontinuierlich optimierte, bis es funktionierte, sodass es eine viel bessere Möglichkeit geben könnte, dies zu tun.

.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"

Aktualisieren

Ich habe mich an das vorherige Tastatur-Setup gewöhnt und aufgehört, es zu optimieren. Leider ist nach einem letzten Neustart der CapsLockauf Ctrlnicht mehr funktionierte so hier bin ich wieder.

Dieses Mal habe ich anstelle des oben verwendeten Mappings xmodmap -pke > ~/.xmoddie Tasten dort ausgeführt und optimiert (was viel einfacher ist).

Die Dinge sind jedoch noch nicht ganz richtig. Das CapsLockStandbild funktioniert wie xevgewohnt, außer wenn der Befehl ausgeführt wird. Dann wird Folgendes zurückgegeben, das die richtige Zuordnung zu zeigen scheint:

# 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
chris
quelle
4
Auf PCs (ich weiß nicht, ob dies auch auf Macs zutrifft) werden showkeynicht die gleichen Schlüsselcodes angezeigt, die X verwendet. Führen xevSie den Befehl aus, um die X-Schlüsselcodes und ihre Aktionen anzuzeigen. Zeigen Sie uns die Ausgabe von xmodmap -pmund die Ausgabe von, xevwenn Sie jede der beteiligten Tasten drücken.
Gilles 'SO- hör auf böse zu sein'
Ich habe oben ein Update für den Befehl xmodmap -pm hinzugefügt
chris
Vielleicht möchten Sie einen Blick auf wiki.archlinux.org/index.php/Apple_Keyboard und help.ubuntu.com/community/AppleKeyboard werfen . Zusammenfassend lässt sich sagen, dass sich der Tastaturtreiber im Kernel anders verhält, als die Dinge in X zu
hacken.
Wenn es in DWM funktioniert hat, ist ein Konflikt wahrscheinlich ~/.config/openbox/rc.xmldas Problem.
MajorBriggs
Haben Sie darüber nachgedacht, udev zu verwenden, um Schlüssel anstelle von xmodmap neu zuzuordnen? udev würde nur eine hwdb-Datei benötigen, um die Scancodes bestimmten Schlüsselcodes zuzuordnen.
Centimane

Antworten:

1

Sie müssen wahrscheinlich Folgendes am Anfang von Ihrem einfügen ~/.xmod

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

Und das Folgende am Ende von ~/.xmod

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

Dadurch wird das System aktualisiert, um die Modifizierernatur dieser Tasten zu erkennen.

billyjmc
quelle