XKB - remapeie as teclas de seta e preserve o comportamento de mudança para selecionar texto

XKB - remapeie as teclas de seta e preserve o comportamento de mudança para selecionar texto

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 preservepara 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.

informação relacionada