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


20

私もCtrl+b非常にemacs似ていると思うが、私はポイントを理解しています。私はそれを他の賢明な使用法ではないキーの単一のキープレスにバインドできるかどうか疑問に思っていますか?つまりSuper_L(左ウィンドウズキーとも呼ばれます。Super_L xevがターミナルで起動してそのキーを押す理由について)

回答:


15

Super_LXキーシムです。Tmuxはターミナルで実行されます。キーシムを文字シーケンスに変換するのは端末エミュレータ次第です。そのため、ターミナルエミュレータとtmuxの両方を設定する必要があります。

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

端末エミュレーター側でSuper_Lは、キーシーケンス\e\e[24~(for M-F12)または\e[34~(for 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構成ツールを使用して実行できます。


これはXでのみ機能しますか?たとえば、X転送なしでシステムにリモートでシェルを実行した場合、機能しません。
xenoterracide

2
@xenoterracide:私はあなたの質問を理解していないか、あなたが私の答えを理解していないかのどちらかです。Super_LはXキーシムなので、おそらくどこかにXサーバーがあります(Windowsからログインしている場合、このキーを左のWindowsキーと呼びます)。Tmuxは端末で実行され、入力をバイトとして読み取り、ファンクションキーをエスケープシーケンスに変換します。リモートログインは透過的であり、sshはエスケープシーケンスを構成するバイトを送信するだけです。
ジル 'SO-悪

1
Macでこれを試しただけで、他の人の時間を少し節約できるかもしれません。iTerm2はF13-F20の送信をサポートしていないようです。参照してくださいcode.google.com/p/iterm2/issues/detail?id=1630
balu

3

できません。キーをバインドすると、cmd_bind_key_parse関数が呼び出され、その関数からcmd-bind-key.c(最終的に)呼び出しが行わkey_string_get_modifierskey-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 

、それは見てませんが、表面にはあまりにも変更するのは難しいです。多分週末(有名な最後の言葉;))プロジェクトですか?


3
ここでの手順がありません。tmuxはテキストモードプログラムで、Xキーシムではなくキーシーケンスを読み取ります。したがって、ターミナルエミュレータとtmuxの両方を適切に構成することにより、実際に可能です。
ジル「SO-悪であるのをやめる」

2

カスタム修飾子キーにプレフィックスを設定することはできませんでしたが、GnomeでMetacityと組み合わせてカスタム修飾子キーと組み合わせてtmuxバインディングを定義することができました。たとえば、Mod4+ kMod4+ をマッピング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など)を定義できるウィンドウマネージャーで機能します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.