web-dev-qa-db-ja.com

tmuxプレフィックスをスーパーにバインドするにはどうすればよいですか?

私も見つける Ctrl+b とてもemacsに似ていますが、私は要点を理解しています。それを他の方法で使用しないキーの単一のキープレスにバインドできるかどうか疑問に思っていますか?つまり Super_L (左ウィンドウキーとも呼ばれます。なぜかと言うと、ターミナルでSuper_L start xevを押してそのキーを押します)

21
xenoterracide

Super_LはXキーシムです。 Tmuxはターミナルで実行されます。 keysymを文字シーケンスに変換するのは、端末エミュレーター次第です。したがって、ターミナルエミュレータとtmuxの両方を構成する必要があります。

Tmuxのドキュメントを見ると、プレフィックスは、オプションの修飾子を持つ既知のキー名にしかなりません。したがって、使用しないキーの組み合わせにtmuxプレフィックスを設定します。たとえば、M-F12と言い、M-F12を押すと、ターミナルでSuper_Lの文字シーケンスを送信できます。もう少し作業を進めれば、キーボードにはおそらくないキーを使用できます(tmuxはF13F20をキー名として受け入れますが、terminfoで宣言する必要があります)。

端末エミュレータ側では、Super_Lがキーシーケンス\e\e[24~M-F12の場合)または\e[34~F20の場合)を生成するように調整する必要があります(ここで、\eはエスケープ文字です)。これを行う方法は、端末エミュレーターに依存します(そして、それを行うには十分に構成できないものもあります)。 xtermでは、Xリソースを通じて行われます。

! Make Super_L act as Meta+F12
XTerm.VT100.translations:       #override \
    <Key>Super_L:  string("\033\033[24~")

Super_Lは通常修飾子であり、修飾子以外が必要な場合は修飾キーが常に機能するとは限りません。 Super_Lをモディファイアにしたくない場合は、モディファイアを削除するか、(混乱を招くことなく)物理キーに別のキーシムを使用します。これは、xmodmap(旧式で理解が簡単)、xkb(最新の、十分に文書化されていない、強力で複雑な方法)、またはデスクトップ環境のGUI構成ツールを使用して行うことができます。

できません。キーをバインドすると、cmd_bind_key_parse関数が cmd-bind-key.c から呼び出され、(最終的に) key_string_get_modifiers からkey-string.cが呼び出されます=:

/* Find modifiers. */
105     int
106     key_string_get_modifiers(const char **string)
107     {
108         int modifiers;
109         
110         modifiers = 0;
111         while (((*string)[0] != '\0') && (*string)[1] == '-') {
112             switch ((*string)[0]) {
113                 case 'C':
114                 case 'c':
115                 modifiers |= KEYC_CTRL;
116                 break;
117                 case 'M':
118                 case 'm':
119                 modifiers |= KEYC_ESCAPE;
120                 break;
121                 case 'S':
122                 case 's':
123                 modifiers |= KEYC_SHIFT;
124                 break;
125             }
126             *string += 2;
127         }
128         return (modifiers);
129     } 

tmux.c には修飾キー#defineの宣言が含まれており、そのファイルから次のようになります。

106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 

表面的には、変更がtooに見えません。たぶん週末(有名な最後の言葉;))プロジェクト?

3
gvkv

接頭辞をカスタム修飾キーに設定できませんでしたが、GnomeでMetacityと組み合わせてカスタム修飾キーと組み合わせてtmuxバインディングを定義することができました。たとえば、Mod4 +をマッピングするにはk およびMod4 +j 現在のパネルにそれぞれ上下に移動するには:

gconftool-2 --set /apps/metacity/keybinding_commands/command_1 --type string "tmux select-pane -D"
gconftool-2 --set /apps/metacity/keybinding_commands/command_2 --type string "tmux select-pane -U"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_1 --type string "<Mod4>j"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_2 --type string "<Mod4>k"

これにより、たとえばWindowsキーと組み合わせてtmuxバインディングが可能になります。これらの線に沿ったものは、グローバルキーボードショートカット(Compiz、KWinなど)を定義できるウィンドウマネージャーで機能します。

2