Sua ideia de usar xbindkeys parece boa:
no seu .xbindkeysrc
adicione uma nova combinação de teclas:
"app_specific_keys.sh"
Control+s
Isso será executado "app_specific_keys.sh"
quando você pressionar ctrl+s
.
Agora você precisa definir o script. Ele deve obter a janela ativa e a partir daí o nome do aplicativo que atualmente tem o foco:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
Isso faria o truque: solicita ao xdotool a janela ativa, solicita ao xprop todas as propriedades da janela com o ID fornecido e reduz a saída muito detalhada ao nome do aplicativo (na verdade, sua classe). Se você rodar isso em um terminal gnome, você receberá
"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"
pode ficar assim:
#!/bin/bash
W=`xdotool getactivewindow`
S1=`xprop -id ${W} |awk '/WM_CLASS/{print $4}'`
S2='"Gnome-terminal"'
if [ $S1 = $S2 ]; then
xdotool key --clearmodifiers ctrl+d
else
xdotool key --clearmodifiers ctrl+s
fi
Isso deve funcionar, mas, como nesta pergunta , devo admitir que não. Provavelmente porque um dos menus globais do Compiz, Unity, não funciona bem com a --clearmodifiers
opção do xdotool. Uma solução alternativa seria adicionar um sono na frente do seu script para poder liberar as chaves você mesmo: Na sua .xbindkeysrc
alteração para esta combinação de teclas:
"sleep 0.5; app_specific_keys.sh"
Control+s
Como nota de rodapé: isso não funcionará, se você desejar alterar as teclas dos programas 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.