
Sei que o remapeamento das teclas de seta é um problema antigo, mas não consigo encontrar uma boa solução que me permita selecionar texto com as teclas SHIFT + remapeadas, como faria com as teclas de seta simples.
Por exemplo, se eu remapear Caps Lock para ISO_Level3_Shift e definir xkb_symbols para ler
key <AC08> { [ k, K , Down, Down] };
ou
key <AC08> { type="THREE_LEVEL",
[ k, K , Down ] };
Pressionar Shift+CapsLock+K se comportará exatamente como CapsLock+K (enquanto Shift+Down se comporta de maneira diferente de Down sozinho).
Tive um pouco mais de sucesso usando utilitários de macro de nível superior e gerando eventos de teclado (ou seja, gerar pressionamentos de teclas shift e de seta); por mais que essa abordagem tenha todo um conjunto de problemas diferentes - geralmente a resposta da interface do usuário a um pressionamento de tecla simulado é diferente do pressionamento de tecla "real" e também há problemas de desempenho - posso digitar mais rápido do que a coisa pode suportar.
dr; como você pode selecionar shift usando teclas de seta remapeadas em X?
Responder1
Você pode usar preserve
para isso: adicione à sua definição de tipo (por exemplo THREE_LEVEL
) a linha
preserve[LevelThree+Shift] = Shift;
Isso diz ao xkb para preservar o modificador de deslocamento ao descobrir o nível apropriado de sua combinação de modificadores no caso de LevelThree + Shift
. O modificador shift é repassado para uso pelo kit de ferramentas ou pelo aplicativo (veja também aqui:usando preservar com tipos).
Observe que isso tem impacto, por exemplo, em como o aplicativo interpreta as combinações de teclas: se você tivesse definido a preservação acima e
key <AC08> { type="THREE_LEVEL", [ k, K, kappa ] };
e você pressionaria Ctrl + Shift + LevelThree + <AC08>
o aplicativo para lê-lo como uma combinação de teclas Ctrl + Shift + kappa
(em vez de normalmente Ctrl + kappa
) porque o modificador de deslocamento é preservado e passado para o aplicativo.