xkb ajuste o seletor de nível de teclado 3 para ctrl + alt

7

O título diz tudo: estou interessado em imitar o comportamento do Windows, onde Ctrl da esquerda + Alt esquerdo atua como um seletor de terceiro nível. Isso é relativamente importante para mim, porque, como programador, no layout do teclado, símbolos importantes como { , [ , ] ou } são acessíveis apenas pressionando Alt Direita + Key , que é extremamente desconfortável usando apenas uma mão. No momento, eu uso ambas as teclas Alt como seletor de nível 3, mas isso tem algumas conseqüências indesejadas, já que não consigo mais inserir alguns atalhos (por exemplo, Home in Firefox).

Estou no openSuse 13.1, usando o XFCE como um ambiente de desktop. Esta pergunta já foi feita algumas vezes, mas infelizmente nenhuma resposta foi fornecida em nenhum deles, e a documentação do xkb é bem escassa.

    
por Vlad 21.01.2014 / 18:03

1 resposta

0

A solução a seguir é bárbara, mas funciona (desde que você esteja satisfeito com uma trava Level3 em vez de uma troca de Level3 - a diferença é que, com esta última, todas as teclas devem ser pressionadas ao mesmo tempo, enquanto ex você pressiona primeiro LeftCtrl + LeftAlt , libera isso e só então pressiona a tecla a ser deslocada) e não requer root.

setxkbmap -option grp:lctrl_lalt_toggle

xmodmap -e 'keycode  37 = Control_L ISO_Level3_Latch'
xmodmap -e 'keycode  64 = Alt_L ISO_Level3_Latch'

Explicação de como isso funciona:

A opção xkb grp: lctrl_lalt_toggle faz com que LeftCtrl mude LeftAlt para level2 e vice-versa (veja: /usr/share/X11/xkb/symbols/group ). Também faz com que o deslocamento de nível 2 de LeftCtrl e LeftAlt seja ISO_Next_Group, o que é indesejável, já que queremos que seja ISO_Level3_Latch, portanto usamos o xmodmap para mudar o level2 para ISO_Level3_Latch para ambos os LeftCtrl e LeftAlt (mantendo o nível 1 como Control_L e Alt_L). Os códigos de teclas (37 e 64) podem ser encontrados inspecionando a saída de xmodmap -pke ou usando xev .

Se apenas aplicássemos as redefinições do xmodmap (sem usar setxkbmap primeiro), então a chave responsável pelo deslocamento do nível 2 seria Shift , como é para quase todas as chaves, então Shift + Ctrl Esquerda e Deslocamento + LeftAlt (mas não LeftCtrl + LeftAlt ) se tornaria Travas Level3.

Por que temos que usar uma trava de nível 3 em vez de uma troca de nível 3?

Se você fosse usar ISO_Level3_Shift ao invés de ISO_Level3_Latch, você teria que pressionar simultaneamente LeftCtrl + LeftAlt + YourDesiredKey , para o level3 mudar para ocorrer. Infelizmente, LeftCtrl e LeftAlt ainda permanecem modificadores, assim, além de YourDesiredKey ser corretamente alterado, ele também seria "modificado" por um dos Alt ou Ctrl (dependendo do que você pressionou primeiro). Com a trava, você não tem esse problema.

    
por 27.07.2016 / 17:37