Problème de mappage de touches lors de l'utilisation d'Emacs et d'Openbox

17

J'ai un clavier Apple et j'ai dû faire un remappage des touches pour faire de la mod-4touche la première touche à gauche de la Spacebarre lorsque vous travaillez avec Emacs. Le script ci-dessous a bien fonctionné lorsque j'utilisais le gestionnaire de fenêtres dwm, mais après être passé à Openbox, j'ai constaté qu'au lieu de permuter les codes clés entre les touches d'options et de commande, les deux clés font la même chose.

Une chose étrange que j'ai remarquée, était sur la nouvelle configuration lorsque je clique sur Exécuter showkeyet que j'appuie sur les touches d'option et de commande respectivement 56 et 125, mais ces touches ne fonctionnent pas du tout lors de leur insertion dans le script ci-dessous au lieu du 64 et 133.

Je dois admettre que j'ai créé le script ci-dessous en le modifiant continuellement jusqu'à ce qu'il fonctionne afin qu'il puisse y avoir une bien meilleure façon de le faire.

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

Mise à jour

Je me suis habitué à la configuration précédente du clavier et j'ai renoncé à le modifier. Malheureusement, après un redémarrage récent de la CapsLockà Ctrlne fonctionnait plus si je suis ici à nouveau.

Cette fois, au lieu du mappage utilisé ci-dessus, j'ai couru xmodmap -pke > ~/.xmodet modifié les touches à la place (ce qui est beaucoup plus facile).

Cependant, les choses ne sont toujours pas tout à fait correctes. Le CapsLockfonctionne toujours normalement, sauf lorsque la xevcommande est exécutée, puis il retourne ce qui suit qui semble montrer le mappage correct:

# 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
la source
4
Sur les PC (je ne sais pas si cela est également vrai sur les Mac) showkeyn'affiche pas les mêmes codes clés que X utilise. Courez xevpour voir les codes-clés X et leurs actions. Montrez-nous la sortie de xmodmap -pmet la sortie de xevlorsque vous appuyez sur chacune des touches concernées.
Gilles 'SO- arrête d'être méchant'
J'ai ajouté une mise à jour ci-dessus pour la commande xmodmap -pm
chris
Vous voudrez peut-être jeter un œil à wiki.archlinux.org/index.php/Apple_Keyboard et help.ubuntu.com/community/AppleKeyboard . Pour résumer, vous pouvez dire au pilote de clavier dans le noyau de se comporter différemment, plutôt que de pirater des choses dans X.
wingedsubmariner
Si cela fonctionnait dans DWM, je suppose qu'un ~/.config/openbox/rc.xmlproblème avec est le problème.
MajorBriggs
Avez-vous envisagé d'utiliser udev pour remapper des clés au lieu de xmodmap? udev aurait juste besoin d'un fichier hwdb pour remapper les scancodes à des codes clés spécifiques.
Centimane

Réponses:

1

Vous devrez probablement placer ce qui suit au début de votre ~/.xmod

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

Et ce qui suit au bas de ~/.xmod

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

Cela mettra à jour le système pour reconnaître la nature modificatrice de ces touches.

billyjmc
la source