web-dev-qa-db-ja.com

アプリケーション固有のキーの組み合わせの再マッピング?

xbindkeysアプリケーションなど、Ubuntuでキーの組み合わせをグローバルに再マッピングする方法(たとえば、Ctrl + Sを送信するためにCtrl + Sをグローバルに再マッピングする方法)を知っています。ただし、必要なのは、特定のアプリケーションに対してのみこれを行う方法です。たとえば、「Ctrl + SをリマップしてCtrl + Dを送信しますが、Chromeのみ)」などです。これを達成する方法はありますか?

18
Derek Thurn

Xbindkeysを使用するというあなたのアイデアはいいですね。

.xbindkeysrcに新しいキーバインディングを追加します:

"app_specific_keys.sh"
   Control+s

"app_specific_keys.sh"を押すと、ctrl+sが実行されます。

次に、スクリプトを定義する必要があります。アクティブなウィンドウを取得し、そこから現在フォーカスがあるアプリの名前を取得する必要があります。

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

これはトリックを行います:xdotoolにアクティブウィンドウを要求し、次にxidに指定されたIDを持つウィンドウのすべてのプロパティを要求し、非常に詳細な出力をアプリケーションの名前(実際にはそのクラス)に減らします。これをgnome-terminalで実行すると、次のようになります

"Gnome-terminal"

次に、アプリケーションのアクションを定義する必要があります。

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

したがって、スクリプト"app_specific_keys.sh"は次のようになります。

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

このshouldは動作しますが、 this question のように、動作しないことを認めざるを得ません。おそらく、Compiz、Unity、Global Menuのいずれかがxdotoolの--clearmodifiersオプションでうまく機能しないためです。 回避策は、自分でキーをリリースできるように、スクリプトの前にスリープを追加することです:.xbindkeysrc変更でこのキーバインディングに:

"sleep 0.5; app_specific_keys.sh"
   Control+s

補足:端末で実行されるプログラムのキーを変更したい場合、これは機能しません(例:コンソールモードでのviまたはemacs)。返されるアプリケーションクラスは、まだ「Gnome-terminal」です。

お役に立てば幸いです。

12
xubuntix

autokey はUbuntuのAutoHotkeyのようなものです。 pythonでスクリプトを記述し、キーボードショートカットとWindowsフィルターを使用してそれらを実行させることができます(擬似アプリケーション固有にする)。スクリプトは、キーボードイベントとマウスイベントを制御し、追加のタッチとしてウィンドウを移動することもできます。

2
aramadia