XKB - remapear as teclas de seta e preservar o comportamento das mudanças para selecionar o texto

5

Sei que o remapeamento da tecla de seta é um problema antigo, mas não consigo encontrar uma boa solução que me permita selecionar texto com SHIFT + teclas remapeadas, como faria com as teclas de setas baunilhadas.

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

Eu tive um pouco mais de sucesso usando utilitários de macro de alto nível e gerando eventos de teclado (isto é, gerar os pressionamentos de tecla de deslocamento e de seta); Embora essa abordagem tenha 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 - eu posso digitar mais rápido do que a coisa pode suportar.

Tl; dr; como você pode deslocar-selecionar usando as teclas de seta remapeadas em X?

    
por dgirardi 02.11.2012 / 23:22

1 resposta

5

Você pode usar preserve para isso: adicionar a sua definição de tipo (por exemplo, THREE_LEVEL ) à linha

preserve[LevelThree+Shift] = Shift;

Isso diz ao xkb para preservar o modificador de turno ao descobrir o nível apropriado de sua combinação de modificadores no caso de LevelThree + Shift . O modificador de turno é passado 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 combinações de pressionamentos de tecla: se você tivesse definido o preservar acima e

key <AC08> { type="THREE_LEVEL", [ k, K, kappa ]  };

e você pressionaria Ctrl + Shift + LevelThree + <AC08> o aplicativo o leria como uma combinação de teclas Ctrl + Shift + kappa (em vez de geralmente Ctrl + kappa ) porque o modificador de deslocamento é preservado e é passado para o aplicativo.

    
por 25.02.2013 / 00:06