Ihre Idee, xbindkeys zu verwenden, klingt gut:
.xbindkeysrc
Fügen Sie eine neue Tastenkombination hinzu:
"app_specific_keys.sh"
Control+s
Dies wird ausgeführt, "app_specific_keys.sh"
wenn Sie drücken ctrl+s
.
Jetzt müssen Sie das Skript definieren. Es sollte das aktive Fenster erhalten und daraus der Name der App, die aktuell den Fokus hat:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
Dies würde den Trick machen: Es fragt xdotool nach dem aktiven Fenster, fragt dann xprop nach allen Eigenschaften des Fensters mit der angegebenen ID und reduziert dann die sehr ausführliche Ausgabe auf den Namen der Anwendung (tatsächlich deren Klasse). Wenn Sie dies in einem Gnome-Terminal ausführen, erhalten Sie
"Gnome-terminal"
Jetzt müssen Sie Aktionen für Ihre Anwendungen definieren:
if [ $N = '"Gnome-terminal"' ]; then
xdotool key --clearmodifiers ctrl+s
else
xdotool key --clearmodifiers ctrl+d
fi
Zusammen "app_specific_keys.sh"
könnte das Skript also so aussehen:
#!/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
Das sollte funktionieren, aber wie bei dieser Frage muss ich zugeben, dass dies nicht der Fall ist. Wahrscheinlich, weil eines von Compiz, Unity, Global Menu mit der --clearmodifiers
Option xdotool nicht gut funktioniert. Eine Problemumgehung wäre, einen Schlaf vor Ihrem Skript hinzuzufügen, um die Schlüssel selbst freigeben zu können: In Ihrer .xbindkeysrc
Änderung an dieser Tastenkombination:
"sleep 0.5; app_specific_keys.sh"
Control+s
Als Randnotiz: Dies funktioniert nicht, wenn Sie die Schlüssel für Programme ändern möchten, die in einem Terminal ausgeführt werden (z. B. vi oder emacs im Konsolenmodus). Die zurückgegebene Anwendungsklasse wäre weiterhin "Gnome-Terminal".
Hoffentlich hilft das.