xmodmap como remapear chaves e desabilitar as originais?

4

Estou pensando em adquirir um teclado de 60% e tentar trabalhar com esse layout antes de comprar o teclado real.

Estou tentando mapear as teclas de seta para caps lock + ijkl e desabilitar as teclas de seta reais. Descobri como remapear, mas quando tento desativar as teclas de seta reais, as remapeadas quebram. Aqui está um mapa de trabalho:

keycode 66 = Mode_switch
keycode 31 = i I Up
keycode 44 = j J Left
keycode 45 = k K Down
keycode 46 = l L Right

Para desativar a seta, adiciono

keycode 111 =

E assim que faço isso, o ijkl não funciona mais como caracteres, mas age como setas mesmo sem pressionar o modificador (caps lock). Como faço para desativar as teclas de seta sem quebrar meu mapeamento anterior?

    
por Tomas 19.02.2018 / 17:11

2 respostas

2

Depois de ler e obter algumas informações. Parece que o problema é que você precisa excluir os modificadores antes de fazer o remapeamento.

Para a resposta:

Depois de alterar as configurações, meu xmodmap se parece com:

xmodmap: até 4 chaves por modificador, (códigos de chaves entre parênteses):

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

A investigação de Mode_switch nos leva à conclusão de que Caps_Lock foi mapeado com sucesso:

[smalltalk@localhost ~]$ xmodmap -pke | egrep -e '(Mode_switch)'
keycode  66 = Mode_switch NoSymbol Mode_switch
keycode 203 = Mode_switch NoSymbol Mode_switch

Agora xmodmap o trecho das man pages:

       keycode NUMBER = KEYSYMNAME ...
               The list of keysyms is assigned to the indicated keycode (which
               may be specified in decimal, hex or octal and can be determined
               by running the xev  program).   Up  to  eight  keysyms  may  be
               attached  to  a  key, however the last four are not used in any
               major X server implementation.  The first keysym is  used  when
               no  modifier  key  is pressed in conjunction with this key, the
               second with Shift, the third when the Mode_switch key  is  used
               with  this  key  and  the  fourth when both the Mode_switch and
               Shift keys are used.

A configuração a seguir funciona, mas você precisa segurar o Caps_Lock enquanto usa o i, j, k, l (exatamente como escrito nas man pages):

Edite o vim ~/.Xmodmap :

! make Capslock the "Mode_switch" key
clear Lock

! All Mod must be cleared
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5

! clearning current Caps_Lock assigment and assigning it new one
keycode 66 =
keycode 66 = Mode_switch

! setting all the modification keys
add Mod1 = Alt_L Alt_R Meta_L
add Mod2 = Num_Lock
add Mod3 = Mode_switch
add Mod4 = Super_L Super_R Hyper_R

! Clear must be done before configuring it
keycode 31 =
keycode 44 =
keycode 45 =
keycode 46 =

! Configuration (first column normal type, second with shift and second with Mod_switch)
keycode 31 = i I Up
keycode 44 = j J Left
keycode 45 = k K Down
keycode 46 = l L Right

! Clearing the arrow keys and some functional keys like home
keycode 111 =
keycode 113 =
keycode 114 =
keycode 116 =
keycode 112 =
keycode 117 =

Agora, para a grande questão:

Como fazer com que as teclas i, j, k, l funcionem enquanto o Caps_Lock está ativado? Você provavelmente terá que fazer alterações em xkb , que eu tenho que pensar.

Editar

Sim, você pode. Eu descobri isso.

Nota: isso se aplica a todos os teclados, todos os layouts, portanto, é bom para testes. Se você quiser fazer isso via xkb corretamente, você tem que criar seu próprio layout e ter um grupo1 e grupo2 + fazer o mapeamento.

O abaixo é um hack ideal para testar o (s) seu (s) teclado (s) (não se esqueça de fazer o backup do seu arquivo ../basic !):

Aviso isso se aplica a todos os teclados, todas as variantes.

Editar arquivo: sudo vim / usr / share / X11 / xkb / compat / basic

# Add  Caps_Lock to virtual modifiers
    virtual_modifiers  NumLock,AltGr,Caps_Lock;

# change FROM:
    interpret Mode_switch {
        useModMapMods= level1;
        virtualModifier= AltGr;
        action= SetGroup(group=+1);
    };

# TO:
    interpret Mode_switch {
        useModMapMods= level1;
        virtualModifier= Caps_Lock;
        action= LockGroup(group=+1);
    };

# change from
    group 2 = AltGr;
TO:
    group 2 = Caps_Lock;

Observação: se você tiver vários layouts, isso pode interferir neles.

    
por 01.03.2018 / 15:38
0

Desculpe por escrever uma resposta em vez de comentar, mas ainda não tenho reputação suficiente para isso. Eu sei que isso não responde a você, mas pode resolver o seu problema.

Em vez de remapear as teclas no sistema operacional, convém comprar um teclado que suporte o remapeamento das chaves em si. Especialmente um teclado que é suportado pelo Firmware QMK . Você pode encontrar uma lista de todos os teclados compatíveis aqui .

Com este firmware, você pode mapear qualquer tecla para qualquer ação, incluindo a adição de várias camadas, onde cada chave pode fazer coisas diferentes. Imagine como pressionar a tecla fn nos laptops, exceto que é totalmente personalizável. Você pode escolher qual tecla ativa qual camada e até como. Por exemplo, você pode ativar / desativar a camada, mantê-la ativa enquanto mantém pressionada a tecla, etc. Dessa forma, você pode ter Caps Lock be Caps Lock quando tocado e alternar para outra camada (onde as ijkl são chaves chaves) quando pressionado.

A única desvantagem é que o remapeamento requer que você edite arrays no código C, embora seja bem simples e não exija conhecimento prévio de programação. A documentação é bastante extensa e explica tudo o que você precisa para começar.

Existem muitas opções de 60% de teclado, embora a maioria seja de kits que você mesmo precisa montar. Se você não tem nenhum problema com isso, confira as placas GH60, Satan ou XD60. Você pode encontrar todas essas opções Se você não quiser montá-las sozinho, pode conferir o teclado Whitefox ou ver se você pode encontrar algo na loja KBDFans , pois eles oferecem serviços de montagem para a maioria de seus kits.

    
por 01.03.2018 / 10:34