Twój pomysł użycia xbindkeys brzmi dobrze:
w Twoim .xbindkeysrc
dodaniu nowego skrótu klawiszowego:
"app_specific_keys.sh"
Control+s
To się wykona "app_specific_keys.sh"
po naciśnięciu ctrl+s
.
Teraz musisz zdefiniować skrypt. Powinien uzyskać aktywne okno, a następnie nazwę aplikacji, która jest aktualnie aktywna:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
To by załatwiło sprawę: pyta xdotool o aktywne okno, następnie pyta xprop o wszystkie właściwości okna o podanym identyfikatorze, a następnie redukuje bardzo szczegółowe dane wyjściowe do nazwy aplikacji (właściwie jej klasy). Jeśli uruchomisz to w terminalu gnomów, dostaniesz
"Gnome-terminal"
Teraz musisz zdefiniować działania dla swoich aplikacji:
if [ $N = '"Gnome-terminal"' ]; then
xdotool key --clearmodifiers ctrl+s
else
xdotool key --clearmodifiers ctrl+d
fi
Razem skrypt "app_specific_keys.sh"
może wyglądać następująco:
#!/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
To powinno zadziałać, ale podobnie jak w tym pytaniu muszę przyznać, że tak nie jest. Prawdopodobnie dlatego, że jedno z Compiz, Unity, Global Menu nie działa dobrze z --clearmodifiers
opcją xdotool. Rozwiązaniem byłoby dodać sen przed skryptu w Odrze, aby móc zwolnić klawisze sobie pytanie: W swojej .xbindkeysrc
zmiany tego kombinacja klawiszy:
"sleep 0.5; app_specific_keys.sh"
Control+s
Na marginesie: to nie zadziała, jeśli chcesz zmienić klucze dla programów działających w terminalu (np. Vi lub emacs w trybie konsoli). Zwrócona klasa aplikacji nadal będzie „Gnome-terminal”.
Mam nadzieję, że to pomaga.