¿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?


¿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.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.