Su idea de usar xbindkeys suena bien:
en su .xbindkeysrc
agregar una nueva combinación de teclas:
"app_specific_keys.sh"
Control+s
Esto se ejecutará "app_specific_keys.sh"
cuando presione ctrl+s
.
Ahora necesita definir el script. Debería obtener la ventana activa y de ahí el nombre de la aplicación que actualmente tiene el foco:
xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'
Esto haría el truco: le pide a xdotool la ventana activa, luego le pide a xprop todas las propiedades de la ventana con la identificación dada, y luego reduce la salida muy detallada al nombre de la aplicación (en realidad, su clase). Si ejecuta esto en una terminal gnome obtendría
"Gnome-terminal"
Ahora necesita definir acciones para sus aplicaciones:
if [ $N = '"Gnome-terminal"' ]; then
xdotool key --clearmodifiers ctrl+s
else
xdotool key --clearmodifiers ctrl+d
fi
Así que juntos, el guión "app_specific_keys.sh"
podría verse así:
#!/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
Esto debería funcionar, pero como en esta pregunta , tengo que admitir que no. Probablemente porque uno de Compiz, Unity, Global Menu no funciona bien con la --clearmodifiers
opción de xdotool. Una solución alternativa sería agregar una suspensión frente a su secuencia de comandos para poder liberar las claves usted mismo: en su .xbindkeysrc
cambio a esta combinación de teclas:
"sleep 0.5; app_specific_keys.sh"
Control+s
Como nota al margen: esto no funcionará si desea cambiar las claves de los programas que se ejecutan en un terminal (por ejemplo, vi o emacs en modo consola). La clase de aplicación devuelta seguiría siendo "Gnome-terminal".
Espero que ayude.