Remapear o Caps Lock com o xmodmap não funciona

10

Quando programa, gosto de trocar essas chaves:

EscTab CtrlCapsLock

Em ~/.xmodmap, eu especifiquei esses novos mapeamentos:

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab

O Escapee Tabteclas de swaps, não há problema, mas em vez de Caps_Locke Control_Ltroca, essas duas chaves se torna Caps_Lock.

Tudo o que eu tento fazer, as teclas de Controle não são atribuídas a Caps_Lock(código de chave 66). Se eu deixar a keycode 66 =tecla, a chave não será atribuída, mas quando eu atribuo Control_Lou Control_R, simplesmente não funciona. Mas, se eu atribuir alguma outra chave, por exemplo keycode 66 = Tab, ela será atribuída, sem problemas.

É como o xmodmap simplesmente não quer que as teclas Caps Lock e Control sejam trocadas. Realmente frustrante. Qualquer ajuda / ponteiros seria realmente útil.

PS: Estou usando o Archlinux.

Aby James
fonte

Respostas:

8

A página do manual xmodmap (1) tem um exemplo exatamente para isso

   !
   ! Swap Caps_Lock and Control_L
   !
   remove Lock = Caps_Lock
   remove Control = Control_L
   keysym Control_L = Caps_Lock
   keysym Caps_Lock = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

mas se você quiser terminar de fazer do jeito que começou, acho que você precisa adicionar pelo menos as linhas removeeadd

   remove Lock = Caps_Lock
   remove Control = Control_L
   keycode 37 = Caps_Lock
   keycode 66 = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

Suponho que esse seja o caso com base neste parágrafo

   add MODIFIERNAME = KEYSYMNAME ...
           This adds all keys containing the given keysyms  to  the  indi‐
           cated  modifier  map.  The keysym names are evaluated after all
           input expressions are read to make it easy to write expressions
           to swap keys (see the EXAMPLES section).

o que faz parecer que alterações no modificador (shift, controle etc.) não são aplicadas até você executar isso também.

(E logicamente o mesmo com remove)

Mikel
fonte
Eu li a página de manual e redesignei as teclas Caps_Lock e Control_L seguindo o exemplo. Mas fiquei curioso para saber por que o mapeamento das chaves da maneira mencionada no OP não funciona. É um bug ou algo assim?
precisa
Parece que é assim que deveria funcionar. Veja minha resposta atualizada.
Mikel
4

Resposta pouco relacionada: eu queria remapear a tecla caps lock para o controle esquerdo, deixando o controle esquerdo real intocado. A página de manual do xmodmap também oferece a solução:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
Clément B.
fonte