Gagasan Anda menggunakan xbindkeys terdengar bagus:
di .xbindkeysrc
add Anda, pengikat kunci baru:
"app_specific_keys.sh"
Control+s
Ini akan dieksekusi "app_specific_keys.sh"
ketika Anda menekan ctrl+s
.
Sekarang Anda perlu mendefinisikan skrip. Seharusnya mendapatkan jendela aktif dan dari situ nama aplikasi yang saat ini memiliki fokus:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
Ini akan melakukan trik: ia meminta xdotool untuk jendela yang aktif, kemudian meminta xprop untuk semua properti jendela dengan id yang diberikan, dan kemudian mengurangi output yang sangat verbose ke nama aplikasi (sebenarnya kelasnya). Jika Anda menjalankan ini di terminal gnome, Anda akan mendapatkannya
"Gnome-terminal"
Sekarang Anda perlu mendefinisikan tindakan untuk aplikasi Anda:
if [ $N = '"Gnome-terminal"' ]; then
xdotool key --clearmodifiers ctrl+s
else
xdotool key --clearmodifiers ctrl+d
fi
Jadi bersama-sama, skripnya "app_specific_keys.sh"
bisa seperti ini:
#!/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
Ini seharusnya bekerja, tetapi seperti dalam pertanyaan ini , saya harus mengakui bahwa itu tidak. Mungkin karena salah satu dari Compiz, Unity, Global Menu tidak berfungsi dengan baik dengan --clearmodifiers
opsi xdotool. Sebuah solusi akan menambahkan tidur di depan naskah Anda di oder untuk dapat melepaskan kunci sendiri: Dalam Anda .xbindkeysrc
perubahan ke Kombinasi tombol ini:
"sleep 0.5; app_specific_keys.sh"
Control+s
Sebagai sidenote: ini tidak akan berfungsi, jika Anda ingin mengubah kunci untuk program yang berjalan di terminal (misalnya vi atau emacs dalam mode konsol). Kelas aplikasi yang dikembalikan masih akan "Gnome-terminal".
Semoga itu bisa membantu.