web-dev-qa-db-ja.com

tmux:utf8キーをバインドしようとしています

Fedora 17i686でkonsoleを使用してtmux1.6を使用しています。

私はAZERTYキーボード(アクセント付きの文字付き)を持っていて、「ù」キーをバインドしたいと思っています。

私は次の〜/ .tmux.confを作成しました:

setw -g utf8 on
bind-key ù split-window -h

しかし、tmuxを実行すると、次のエラーが発生します。

/home/glines/.tmux.conf: 2: unknown key: ù

このキーをバインドする方法はありますか?

あなたの助けのために、事前に感謝します。

3
GlinesMome

残念ながら、tmuxは、キーバインディングで単一の8ビット値のみをサポートします。

(固定長の)8ビットエンコーディング(ISO 8859-1、ISO 8859-15など)を使用していた場合は、バインディングが機能しているはずです。ただし、UTF-8を使用している場合、ù(U + 00F9)は2バイト(C3 B9)としてエンコードされ、tmuxは不明なキー名として拒否します(キーがより長い場合) 1バイト(修飾子プレフィックスを削除した後)は、特別なキーの名前として処理されます(例:F1PageUpKP0など)。


しかし、あなたが必死であるならば、あなたが試みることができるひどいハックがあります:

tmux bind-key -r $(printf '\303') display 'c3 prefix binding hack' \; \
     bind-key -r $(printf '\271') split-window -h

これは、ùのUTF-8エンコーディングの最初のバイト(16進数のC3 B9、8進数の303 271)を基本的に無視しながら、「プレフィックスモード」にとどまるために使用することにより、「繰り返し」バインディング機能を悪用します。

Ùの最初のバイト(8進数の303)はダミーコマンドにバインドされ、2番目のバイト(8進数の271)はターゲットコマンドにバインドされます。これには、tmuxrepeat-timeオプションをゼロに設定してはならない(繰り返しを無効にする)必要があり、繰り返しモードのままtmuxのままにするという副作用があります。入力してからrepeat-timeミリ秒(デフォルトは500ミリ秒) Prefixù (この副作用は通常、矢印キーをすぐに入力した場合にのみ顕著になります(ありまたはなし) Control または Meta)後 Prefixù-これらのキーは、「繰り返し可能」である唯一のデフォルトのバインディングです)。

上記の例では、printf Shellコマンドを使用して必要なバイトを生成していますが、これは.tmux.confでは機能しません。 tmux 1.7を実行している場合は、次のように記述できます(.tmux.confに):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h

ただし、この16進キー構文はtmux 1.6では機能しません。したがって、生のバイトがファイルに直接含まれるように調整するか(テキストエディタがこれに対抗する可能性があり、間違いを犯しやすい)、またはシェルを使用して支援する必要があります。

run-Shell "tmux bind-key -r $(printf '\\303') display 'c3 prefix binding hack' \\; bind-key -r $(printf '\\271') split-window -h"

注:run-Shellはコマンドを非同期で実行するため、最初のセッションの開始直後にバインディングを使用できない場合があります。

7
Chris Johnsen

ChrisJohnsenが説明したtmux2.3の動的再バインドは不要になり、機能しなくなりました。 UTF-8文字をバインドするには、0x表記でそのUnicode値を使用するだけです。

バインドしたいとしましょう Prefixě (キャロン付きの小さなE)ウィンドウ2へ。

まず、ěのUnicode値を見つける必要があります(これはUTF-8コードシーケンスとは異なることに注意してください)。

あなたは例えばを使用することができますpython3 UTF-8文字をそのUnicode値に変換するには:

$ python3
>>> hex(ord('ě'))
'0x11b'

ěのUnicode値が0x011Bであることがわかったら、次の行をtmux構成ファイルに追加するだけです。

bind-key 0x011B select-window -t 2
2
Lefo