Remapeamento da combinação de chaves específica do aplicativo?

16

Estou ciente de várias maneiras de remapear combinações de teclas no Ubuntu em uma base global (por exemplo, remapeamento global de Ctrl + S para enviar Ctrl + D ou algo assim), como as xbindkeys aplicação. O que eu preciso, no entanto, é uma maneira de fazer isso somente para um aplicativo específico . Por exemplo, algo como "Remapear Ctrl + S para enviar Ctrl + D, mas somente no Chrome ". Existe alguma maneira de conseguir isso?

    
por Derek Thurn 20.01.2012 / 22:28

2 respostas

10

Sua ideia de usar xbindkeys é boa:

no seu .xbindkeysrc adicione um novo atalho:

"app_specific_keys.sh"
   Control+s

Isso executará "app_specific_keys.sh" quando você pressionar ctrl+s .

Agora você precisa definir o script. Ele deve obter a janela ativa e, a partir disso, o nome do aplicativo que atualmente tem o foco:

xprop -id 'xdotool getactivewindow' |awk '/WM_CLASS/{print }'

Isso funcionaria: ele solicita xdotool para a janela ativa e, em seguida, solicita xprop para todas as propriedades da janela com o ID fornecido e, em seguida, reduz a saída muito detalhada ao nome do aplicativo (na verdade, sua classe). Se você rodar isso em um terminal gnome, você pegaria

"Gnome-terminal"

Agora você precisa definir ações para seus aplicativos:

if [ $N = '"Gnome-terminal"' ]; then                                                    
    xdotool key --clearmodifiers ctrl+s                                                          
else                                                                            
    xdotool key --clearmodifiers ctrl+d                                                          
fi  

Então, juntos, o script "app_specific_keys.sh" poderia ser assim:

#!/bin/bash                                                                     
W='xdotool getactivewindow'                                                     
S1='xprop -id ${W} |awk '/WM_CLASS/{print }''                                 
S2='"Gnome-terminal"'                                                           
if [ $S1 = $S2 ]; then                                                          
   xdotool key --clearmodifiers ctrl+d                                             
else                                                                            
   xdotool key --clearmodifiers ctrl+s                                          
fi  

Este deve funcionar, mas como em essa questão , eu tenho que admitir que isso não acontece. Provavelmente porque uma das opções do Compiz, Unity, Global Menu não funciona bem com a opção --clearmodifiers do xdotool. Uma solução alternativa seria adicionar um sono em frente ao seu script para que você mesmo possa liberar as chaves: Em sua alteração de .xbindkeysrc para essa associação de teclas:

"sleep 0.5; app_specific_keys.sh"
   Control+s

Como um sidenote: isso não funcionará, se você quiser alterar as chaves para programas que são executados em um terminal (por exemplo, vi ou emacs no modo de console). A classe de aplicativo retornada ainda seria "Gnome-terminal".

Espero que ajude.

    
por xubuntix 25.01.2012 / 10:46
2

autokey é como o AutoHotkey para o Ubuntu. Você pode escrever scripts em python e executá-los via atalho de teclado e um filtro do Windows (tornando-o específico para o pseudo-aplicativo). Seu script pode controlar eventos de teclado e mouse e até mesmo mover as janelas como um toque adicional.

    
por aramadia 26.01.2012 / 20:50