Como permitir que acordes de teclas do teclado alterem temporariamente o mapa de teclas?

9

Eu realmente me acostumado com a funcionalidade "simultânea Modo Vi" de KeyRemap4MacBook que permite que você pressione e segure o se dteclas simultaneamente e, em seguida, usar os h, j, k, e lteclas como as teclas de seta. Quando se dsão pressionados juntos, não sou devento é acionado, mas quando digito normalmente eu não notar quaisquer problemas de atraso com bater sou dindividualmente.

Como eu recriei essa funcionalidade no Linux (especificamente RHEL 6.4)?

Algumas idéias que tive:

  1. Se s+ dpoderia ser mapeado de novo para um modificador, em seguida, as teclas h, j, k, l+ modificador pode ser mapeado em conformidade. (O teclado que estou usando agora não possui nenhuma tecla modificadora disponível para usar em vez de s+ d, mais o objetivo do Modo Vi simultâneo é manter todos os dedos na linha inicial. CapsLockJá está remapeado para Controle Escape).

  2. Idealmente, eu encontraria uma maneira de fazer isso usando as configurações do sistema ou algo como o teclado XKB que já estou usando. Se isso não for possível, talvez algo semelhante ao programa xcape (que eu estou usando e que permite que as chaves sejam mapeadas para diferentes símbolos de teclas pressionadas e modificadoras) possa ser escrito. xcapedispara a liberação de teclas, portanto, teria que ser ajustado para impedir que as teclas se fiquem dmuito lentas.

ws_e_c421
fonte
No RHEL 6.4? Você está usando o vim do X ou via terminal?
Otheus 24/04/2015
Ah, e como você mapeia CapsLock para Control AND Escape ??
Otheus 24/04/2015
Mapeie o CapsLock para Control e use o xcape (link acima) para mapear pressionamentos curtos de controle para Escape. Na pergunta, refiro-me a um modo semelhante ao Vi do KeyRemap4MacBook, não ao vim. Até agora, a opção mais promissora que encontrei para o que estou procurando é usar o módulo Python Xlib de maneira semelhante à usada pelo Plover. Até agora, não tive muito tempo para trabalhar nisso.
precisa saber é o seguinte

Respostas:

2

Você não pode fazer isso com as ferramentas padrão, teria que escrever algo (provavelmente muitos xserver serão afetados, e se você quiser que isso funcione fora do X, haverá alterações no kernel).

A razão para isso é que as idéias nas quais o design é baseado (e otimizado para) não incluem codificação de teclas regulares ou emissão de caracteres de modificadores.

hildred
fonte
Ainda estou investigando isso (preciso de mais tempo). Encontrei o projeto Plover, que parecia fornecer um modelo para uma solução baseada em X, mas quero mudar para Wayland, então parei de investigar isso. Recentemente, descobri o caps2esc, que usa libevdev e libudev para capturar e remapear dispositivos dinamicamente. Eu acho que uma abordagem como essa poderia funcionar para chording, além de remapear, mas precisa ser investigada mais detalhadamente (eu também preferiria uma solução libinput).
Ws_e_c421
Meu comentário sobre a libinput foi mal informado. Eu pensei que o caps2esc funcionou com o driver xf86-input-evdev, que é uma alternativa ao libinput, mas na verdade funciona no nível libevdev, que é uma biblioteca de nível inferior usada pelos dois projetos. As ferramentas do caps2esc foram refatoradas no projeto de ferramentas de interceptação . Acredito que um plugin bem escrito para ferramentas de interceptação possa fornecer o recurso que descrevi. Está na minha lista para investigar.
ws_e_c421
2

Então, depois de quatro anos, finalmente tenho um rascunho de uma resposta a essa pergunta. A resposta é usar as ferramentas de interceptação, que usam libevdev para capturar a entrada do teclado e fazer o processamento antes de reemitê-la. Em relação mapeamento de teclas em simultâneo, eu fiz um plugin bruto para ferramentas de intercepção chamado chorded Keymap que permite h, j, k, lagem como as teclas de seta quando se dsão pressionados simultaneamente.

ws_e_c421
fonte