Votre idée d'utiliser xbindkeys sonne bien:
dans votre .xbindkeysrc
ajout d'une nouvelle liaison de touches:
"app_specific_keys.sh"
Control+s
Cela s'exécutera "app_specific_keys.sh"
lorsque vous appuyez sur ctrl+s
.
Vous devez maintenant définir le script. Il devrait obtenir la fenêtre active et de là le nom de l'application qui a actuellement le focus:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
Cela ferait l'affaire: il demande à xdotool la fenêtre active, puis à xprop toutes les propriétés de la fenêtre avec l'id donné, puis réduit la sortie très verbeuse au nom de l'application (en fait sa classe). Si vous exécutez ceci dans un gnome-terminal, vous obtiendrez
"Gnome-terminal"
Vous devez maintenant définir des actions pour vos applications:
if [ $N = '"Gnome-terminal"' ]; then
xdotool key --clearmodifiers ctrl+s
else
xdotool key --clearmodifiers ctrl+d
fi
Donc, ensemble, le script "app_specific_keys.sh"
pourrait ressembler à ceci:
#!/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
Cela devrait fonctionner, mais comme dans cette question , je dois admettre que non. Probablement parce que l'un de Compiz, Unity, Global Menu ne fonctionne pas bien avec l' --clearmodifiers
option de xdotool. Une solution de contournement consisterait à ajouter un sommeil devant votre script afin de pouvoir libérer les clés vous-même: Dans votre .xbindkeysrc
modification de ce raccourci clavier:
"sleep 0.5; app_specific_keys.sh"
Control+s
En guise de note: cela ne fonctionnera pas, si vous voulez changer les clés des programmes qui s'exécutent dans un terminal (par exemple vi ou emacs en mode console). La classe d'application retournée serait toujours "Gnome-terminal".
J'espère que cela pourra aider.