Remapeie uma combinação de teclas para outra combinação, por exemplo, Super + Ctrl + Shift + J -> Ctrl + Shift + Esquerda

11

Quero implementar uma camada de chave de adição, para poder acessar chaves não alfanuméricas sem precisar mover meus pulsos.

Eu tenho usado o Autokey para esse fim, mas a experiência foi insatisfatória: teve atrasos ocasionais e permitiu que as teclas originais deslizassem em certos aplicativos.

Então, eu preciso de uma solução de baixo nível.

lolmaus - Andrey Mikhaylov
fonte
você pode ter que criar controlador de entrada virtual personalizada para fazer isso que eu acho que seria escrito em C
Amias
@ Amias, você pode por favor elaborar?
Lolmaus # Andrey Mikhaylov 14/10
você pode ter um driver xinput que executa o driver de teclado normal, mas interpreta as teclas antes de passá-las para o xorg, isso lhe daria controle completo, mas seriam alguns dias moderadamente complexos para um programador em C.
Amias 14/10

Respostas:

10

Experimente uma combinação de xbindkeys e xvkbd . xbindkeys escuta as chaves e envia a tradução para xvkbd.

sudo apt-get install xbindkeys xvkbd
xbindkeys --defaults > /home/your-user-name/.xbindkeysrc

Abra .xbindkeysrc no seu editor favorito. Eu comentei todo o resto, mas é bom consultar, se necessário.

Para conferir, tentei mapear Ctrl +; para Ctrl + V

"xvkbd -xsendevent -text "\Cv""
   control + semicolon

Espero que você esteja atrás de algo assim

"xvkbd -xsendevent -text "\C\S\[Left]""
  Super+Control+Shift+J

Salve o arquivo e execute xbindkeys

Para recarregar as alterações de configuração, eu matei o processo xbindkeys e reiniciei.

sintaxe xbindkeys

Eu trabalhei com a combinação de teclas usando uma GUI para xbindkeys

sudo apt-get install xbindkeys-config
xbindkeys-config

Depois de executar isso, pressione Get Key para a combinação colocar na segunda linha do seu arquivo .xbindkeysrc.

sintaxe xvkbd

Do manual:

\r - Return
\t - Tab
\b - Backspace
\e - Escape
\d - Delete
\S - Shift (modify the next character; please note that modify with ``\S'' will be ignored in many cases. For example, ``a\Cb\ScD\CE'' will be interpreted as a, Control-b, c, Shift-D, and Control-Shift-E.)
\C - Control (modify the next character)
\A - Alt (modify the next character)
\M - Meta (modify the next character)
\[keysym] - the keysym keysym (e.g., \[Left]), which will be processed in the similar matter with other general characters
\{keysym} - the keysym keysym (e.g., \{Left}), which will be processed in more primitive matter and can also be used for modofier keys such as Control_L, Meta_L, etc.; also, \{+keysym} and \{+keysym} will simulate press and release of the key, respectively [Version 3.3]
\Ddigit - delay digit * 100 ms
\xvalue - move mouse pointer (use "+" or "-" for relative motion)
\yvalue - move mouse pointer (use "+" or "-" for relative motion)
\mdigit - simulate click of the specified mouse button

Adoro ouvir como funciona e se a combinação foi adequada para o seu propósito. Parece bom como keymapper, mas não necessariamente como macro runner.

Mark Hewitt
fonte
Hey @MarkHewitt! Muito obrigado pela resposta detalhada! Infelizmente, isso não funciona muito bem para mim: o pressionamento de tecla original continua aparecendo, o que estraga tudo.
lolmaus - Andrey Mikhaylov 30/10