CapsLock como tecla modificadora para keymaps de aplicativos

9

Eu sou desenvolvedor e atualmente estou usando o Ubuntu Linux com PyCharm IDE para desenvolvimento de website. Para melhorar o desempenho de digitação, considero mudar CapsLock para Hyper_L e atribuí-lo ao mod3 usando xmodmap. Depois disso, quero mapear o mod3 para a tecla 'i' para 'Up'. Até agora o que fiz foi:

xmodmap -e "keysym Caps_Lock = Hyper_L"

saída é assim:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

então eu removo o Hyper_L do mod4

xmodmap -e "remove Mod4 = Hyper_L"

Depois eu tentei atribuir o Hyper_L ao mod3

xmodmap -e "add Mod3 = Hyper_L"

No entanto, recebi o seguinte erro:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Então, qual foi o problema aqui? Como eu posso fazer isso funcionar? A minha abordagem está certa? Ou eu deveria usar uma abordagem diferente para usar o mod3 para chaves personalizadas?

P.S. Estou usando o teclado Microsoft Natural Ergonomic 7000

    
por Khamidulla 05.12.2013 / 10:27

1 resposta

16

Há respostas de bajillion na internet, a maioria delas confusas.

A chave é que você precisa mapear 'keycode 66' para sua hiper-chave, remover o mapeamento dessa chave de outros mod {1,2,4,5} (somente se presente) e então definir mod3.

Abra ~ / .Xmodmap e coloque o seguinte:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Execute isto

xmodmap ~/.Xmodmap

Se algo der errado, você poderá redefinir seu teclado com:

setxkbmap -layout us

Causas prováveis de algo explodindo são que o Hyper_L é mapeado em algum outro lugar. Corrija isso executando xmodmap sem args para descobrir o que mais está vinculado a Hyper_L. Quando você sabe o que precisa remover, mande um 'remover BINDING = Hyper_L' no seu arquivo .Xmodmap.

O arquivo .Xmodmap será carregado quando você abrir as sessões do X11, você deve ter esse mapeamento em vigor na próxima vez que fizer login ou reinicializar.

Esta configuração funciona para a configuração do ubuntu 14.04. Se você tiver um * nix diferente e isso não funcionar, poste o que você fez para contornar isso aqui e eu o incorporarei na resposta.

    
por 20.08.2014 / 03:08