Anwendungsspezifische Tastenkombination neu zuordnen?

18

Ich kenne eine Reihe von Möglichkeiten, Tastenkombinationen in Ubuntu global neu zuzuordnen (z. B. globales Neuzuordnen von Strg + S, um Strg + D oder etwas anderes zu senden), wie z. B. die Anwendung xbindkeys . Was ich jedoch brauche, ist eine Möglichkeit, dies nur für eine bestimmte Anwendung zu tun . Zum Beispiel so etwas wie "Remap Strg + S, um Strg + D zu senden, aber nur in Chrome ". Gibt es eine Möglichkeit, dies zu erreichen?

Derek Thurn
quelle
Hast du diesen Thread gelesen ? Ich habe es nicht ausprobiert, aber es scheint mir genau das zu sein, wonach Sie suchen. Ich weiß allerdings nicht, ob ich eine richtige Antwort schreiben soll.
Lumbric

Antworten:

12

Ihre Idee, xbindkeys zu verwenden, klingt gut:

.xbindkeysrcFügen Sie eine neue Tastenkombination hinzu:

"app_specific_keys.sh"
   Control+s

Dies wird ausgeführt, "app_specific_keys.sh"wenn Sie drücken ctrl+s.

Jetzt müssen Sie das Skript definieren. Es sollte das aktive Fenster erhalten und daraus der Name der App, die aktuell den Fokus hat:

xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'

Dies würde den Trick machen: Es fragt xdotool nach dem aktiven Fenster, fragt dann xprop nach allen Eigenschaften des Fensters mit der angegebenen ID und reduziert dann die sehr ausführliche Ausgabe auf den Namen der Anwendung (tatsächlich deren Klasse). Wenn Sie dies in einem Gnome-Terminal ausführen, erhalten Sie

"Gnome-terminal"

Jetzt müssen Sie Aktionen für Ihre Anwendungen definieren:

if [ $N = '"Gnome-terminal"' ]; then                                                    
    xdotool key --clearmodifiers ctrl+s                                                          
else                                                                            
    xdotool key --clearmodifiers ctrl+d                                                          
fi  

Zusammen "app_specific_keys.sh"könnte das Skript also so aussehen:

#!/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  

Das sollte funktionieren, aber wie bei dieser Frage muss ich zugeben, dass dies nicht der Fall ist. Wahrscheinlich, weil eines von Compiz, Unity, Global Menu mit der --clearmodifiersOption xdotool nicht gut funktioniert. Eine Problemumgehung wäre, einen Schlaf vor Ihrem Skript hinzuzufügen, um die Schlüssel selbst freigeben zu können: In Ihrer .xbindkeysrcÄnderung an dieser Tastenkombination:

"sleep 0.5; app_specific_keys.sh"
   Control+s

Als Randnotiz: Dies funktioniert nicht, wenn Sie die Schlüssel für Programme ändern möchten, die in einem Terminal ausgeführt werden (z. B. vi oder emacs im Konsolenmodus). Die zurückgegebene Anwendungsklasse wäre weiterhin "Gnome-Terminal".

Hoffentlich hilft das.

xubuntix
quelle
1
Das hat gut funktioniert. Ich habe xdotool nicht zum Senden der Tastenanschläge verwendet, sondern nur verwendet xvkbd -xsendevent -text "\Cs". Dies scheint nicht unter den Problemen zu leiden, die Sie mit xdotool hatten.
Derek Thurn
Es ist nicht möglich, einen Tastenanruf selbst zu tätigen, wie z . B. einen fAnruf xdotool key f. Immer noch auf der Suche nach einem Weg, dies zu tun.
Phil294
ha, endlich eins gefunden! xdotool type --window $(xdotool getwindowfocus) [keys] Das Verwenden der Option --window und das Senden an das derzeit aktive Fenster führt NICHT zu rekursivem Verhalten.
Phil294
2

Autokey ist wie AutoHotkey für Ubuntu. Sie können Skripte in Python schreiben und sie über eine Tastenkombination und einen Windows-Filter ausführen lassen (wodurch sie pseudoanwendungsspezifisch werden). Ihr Skript kann Tastatur- und Mausereignisse steuern und sogar Fenster als zusätzliche Berührung verschieben.

Aramadia
quelle
autokeyist viel schneller als xbindkeys, auch wenn der Fenstererkennungsmodus aktiviert ist - sofortige Maßnahmen werden ergriffen. Nachteil: Maustastenbelegungen scheinen nicht zu funktionieren (ich denke, es ist ein Fehler)
Phil294