Problema di keymapping quando si lavora con Emacs e Openbox


17

Ho una tastiera Apple e ho dovuto fare qualche rimappatura dei tasti per rendere il mod-4tasto il primo tasto a sinistra della Spacebarra per quando lavoravo con Emacs. Lo script seguente ha funzionato bene quando stavo usando il gestore di finestre dwm, ma dopo essere passato a Openbox ho scoperto che invece di scambiare i codici chiave tra i tasti opzione e comando, entrambi i tasti stanno facendo la stessa cosa.

Una cosa strana che ho notato, era sulla nuova configurazione quando faccio clic su Esegui showkeye premo i tasti opzione e comando ottengo rispettivamente 56 e 125, ma questi tasti non funzionano affatto quando li inserisco nello script seguente invece del 64 e 133.

Devo ammettere di aver creato lo script qui sotto modificandolo continuamente fino a quando non ha funzionato in modo che ci potesse essere un modo molto migliore di farlo.

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

Aggiornare

Mi sono abituato alla configurazione della tastiera precedente e ho rinunciato a provare a modificarlo. Purtroppo, dopo una recente riavvio del CapsLockper Ctrlnon funzionava più quindi eccomi qui di nuovo.

Questa volta invece della mappatura usata sopra ho eseguito xmodmap -pke > ~/.xmode modificato le chiavi lì (che è molto più facile).

Tuttavia, le cose non sono ancora del tutto giuste. Il CapsLockfermo funziona normalmente, tranne quando xevviene eseguito il comando, quindi restituisce quanto segue che sembra mostrare il mapping corretto:

# 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
Su PC (non so se questo è vero anche su Mac) showkeynon mostra gli stessi codici chiave che X usa. Corri xevper vedere i codici chiave X e le loro azioni. Mostraci l'output di xmodmap -pme l'output di xevquando premi ciascuno dei tasti coinvolti.
Gilles 'SO- smetti di essere malvagio' il

Ho aggiunto un aggiornamento sopra per il comando xmodmap -pm
chris

Potresti dare un'occhiata a wiki.archlinux.org/index.php/Apple_Keyboard e help.ubuntu.com/community/AppleKeyboard . Per riassumere, puoi dire al driver della tastiera nel kernel di comportarsi diversamente, piuttosto che hackerare le cose in X.
wingedsubmariner,

Se funzionasse in DWM, la mia ipotesi è che ~/.config/openbox/rc.xmlil problema sia un conflitto .
MajorBriggs,

Hai mai pensato di usare udev per rimappare le chiavi invece di xmodmap? udev richiederebbe solo un file hwdb per rimappare gli scancodes a specifici keycode.
Centimane,

Risposte:


1

Probabilmente devi inserire quanto segue all'inizio del tuo ~/.xmod

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

E il seguente in fondo a ~/.xmod

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

Ciò aggiornerà il sistema per riconoscere la natura modificatrice di questi tasti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.