¿Reasignación de combinación de teclas específica de la aplicación?

18

Conozco varias formas de reasignar combinaciones de teclas en Ubuntu a nivel mundial (por ejemplo, reasignar globalmente Ctrl + S para enviar Ctrl + D o algo así), como la aplicación xbindkeys . Sin embargo, lo que necesito es una forma de hacer esto solo para una aplicación específica . Por ejemplo, algo así como "Reasignar Ctrl + S para enviar Ctrl + D, pero solo en Chrome ". ¿Hay alguna forma de lograr esto?

Derek Thurn
fuente
¿Leíste este hilo ? No lo he intentado, pero me parece que es exactamente lo que estás buscando. Sin embargo, no sé nada al respecto para escribir una respuesta adecuada.
lumbric

Respuestas:

12

Su idea de usar xbindkeys suena bien:

en su .xbindkeysrcagregar 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 --clearmodifiersopció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 .xbindkeysrccambio 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.

xubuntix
fuente
1
Esto terminó funcionando bien. No utilicé xdotool para enviar las pulsaciones de teclas, simplemente lo utilicé xvkbd -xsendevent -text "\Cs". Esto no parece sufrir los problemas que estaba viendo con xdotool.
Derek Thurn
no es posible hacer una llamada clave en sí misma, como fllamar xdotool key f. Todavía estoy buscando una manera de hacer esto.
phil294
ja, finalmente encontré uno! xdotool type --window $(xdotool getwindowfocus) [keys] usando la opción --window y enviando a la ventana activa actualmente NO conducirá a un comportamiento recursivo.
phil294
2

autokey es como AutoHotkey para Ubuntu. Puede escribir scripts en python y hacer que se ejecuten mediante un método abreviado de teclado y un filtro de Windows (lo que lo hace específico para la pseudo-aplicación). Su secuencia de comandos puede controlar los eventos del teclado y el mouse e incluso mover las ventanas como un toque adicional.

aramadia
fuente
autokeyes MUCHO más rápido que xbindkeys, incluso con el modo de detección de ventanas activado: se toman medidas inmediatas. Desventaja: las asignaciones de los botones del mouse parecen no funcionar (creo que es un error)
phil294