Problema de mapeamento de teclas ao trabalhar com Emacs e Openbox


17

Eu tenho um teclado da Apple e precisei remapear algumas das teclas para torná-la mod-4a primeira à esquerda da Spacebarra para trabalhar com o Emacs. O script abaixo funcionou bem quando eu estava usando o gerenciador de janelas dwm, mas depois de mudar para o Openbox, descobri que, em vez de trocar códigos de chave entre as teclas de opção e comando, as duas estão fazendo a mesma coisa.

Uma coisa estranha que notei foi a nova configuração, quando clico em Executar showkeye pressiono as teclas de opção e comando, recebo 56 e 125, respectivamente, mas essas teclas não funcionam ao inseri-las no script abaixo, em vez de 64 e 64. 133

Devo admitir que criei o script abaixo, aprimorando-o continuamente até que funcionasse, para que houvesse uma maneira muito melhor de fazê-lo.

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

Atualizar

Acostumei-me à configuração anterior do teclado e desisti de tentar ajustá-la. Infelizmente, após um reinício recente CapsLockpara Ctrljá não funcionou por isso aqui estou novamente.

Dessa vez, em vez do mapeamento usado acima, executei xmodmap -pke > ~/.xmode aprimorei as chaves (o que é muito mais fácil).

No entanto, as coisas ainda não estão bem. O CapsLockstill ainda funciona normalmente, exceto quando o xevcomando é executado, e retorna o seguinte, que parece mostrar o mapeamento correto:

# 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
Nos PCs (não sei se isso também é verdade nos Macs) showkeynão mostra os mesmos códigos que o X usa. Corra xevpara ver os códigos-chave X e suas ações. Mostre-nos a saída xmodmap -pme a saída de xevquando você pressiona cada uma das teclas envolvidas.
Gilles 'SO- stop be evil'

Eu adicionei uma atualização acima para o comando xmodmap -pm
chris

Você pode dar uma olhada em wiki.archlinux.org/index.php/Apple_Keyboard e help.ubuntu.com/community/AppleKeyboard . Para resumir, você pode dizer o driver do teclado no kernel para se comportar de forma diferente, ao invés de cortar as coisas em X.
wingedsubmariner

Se estava funcionando no DWM, meu palpite é que ~/.config/openbox/rc.xmlo problema é um conflito .
MajorBriggs

Você já pensou em usar o udev para remapear as chaves em vez do xmodmap? O udev exigiria apenas um arquivo hwdb para remapear os scancodes para códigos-chave específicos.
Centimane

Respostas:


1

Você provavelmente precisará colocar o seguinte no início da sua ~/.xmod

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

E o seguinte na parte inferior de ~/.xmod

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

Isso atualizará o sistema para reconhecer a natureza do modificador dessas chaves.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.