Muttで<Control> <Arrowkey>をバインドする方法は?


9

私はここで立ち往生しています:

<enter>, <backspace>, <up>, <down>, <left>, <right>コントロールの1つをバインドすることは可能ですか?

\C<foo>|foo>ヘルプのように表示され、^<up>バインドされていません。
'\C<foo>も機能'\C <foo>'しません("代わりに同じです)。

<control> 存在しません。

実際にヘルプに表示される可能性^<foo>ありますが、マップした場合に限り^<foo>、これは正確には望んでいません。;)

回答:


5

まず、端末がこれらのキーの組み合わせに対して異なるエスケープシーケンスを送信するかどうかを決定する必要があります。端末で実行されているアプリケーションは、キーではなく文字を入力として受け取ります。ファンクションキーは、制御文字として、またはエスケープ文字で始まるエスケープシーケンスとしてエンコードされます(\eキーバインディングのように記述できます)。

端末のキーの組み合わせによって送信されたエスケープシーケンスを表示するには、シェルプロンプトでCtrl+ Vを押してから、キーの組み合わせを押します。たとえば、シェルプロンプトでCtrl+ V Ctrl+ を押すとLeft、が表示され^[O5Dます。^[エスケープ文字なので\eO5D、MuttをバインドしてCtrl+ に反応させる必要がありますLeft

bind editor \eO5D backward-word

一部の端末は、異なる修飾子を使用して、同じキーに対して同じエスケープシーケンスを送信します。その場合は、端末の動作を変更する方法、または別の端末に切り替える方法を理解する必要があります。


良さそうに聞こえますが、機能しません。\eエスケープキーではなく、エスケープ文字です...
Profpatsch

@Profpatsch奇妙なことに、そのバインディングは私にはうまくいきます。私はずっとずっとずっとMutt 1.5を使ってきました、たぶん1.4は違う働きをしますか?\eマクロで使用すると機能しますmacro editor \e[O5D \ebか?
Gilles「SO-悪をやめる」

1
私はヒットターミネーター、上のよCtrl+Down私が得る^[[1;5B、それは動作しませんbind index \e[1;5B commandではなく\e1;5B 、あまりにも、。ああ、私はMutt 1.5.21(Arch。;)で作業しています
Profpatsch 2013

1
@Profpatschわかりました、これを再現できます。:あり5つの文字に制限であるように思われるbind editor \e[1\;5 backward-word(と挿入余分な私のために働きD、私が入力したときESC [ 1 ; 5 D)、しかしbind editor \e[1\;5D backward-wordで結果ESC [ 1 ; 5 D何もしません。ソースコード(MAX_SEQ)には8文字の制限がありますが、5文字でトリガーされるものはありません。
Gilles「SO-悪をやめる」

@Profpatsch回避策は、端末に短いシーケンスを送信させることです。ターミネーターがこれをサポートしているかどうかはわかりません。
Gilles「SO-悪をやめる」

15

私はここで正しい答えを見つけました:

mutt内で、次のコマンドを使用します

:exec what-key

次に、目的のキー(Ctrl +矢印など)を押すと、キーの参照方法を学習できます。私の場合<C-Up>、Ctrl + Upを使用します。


4
を使用:exec what-keyしてこの情報を取得することに成功したが、「what-key」を押してwhat-keyコマンドから抜け出すことができなかった場合、終了するキーシーケンスはCtrl-gです。
KDN、2017年

@KDN:ありがとう。少し恥ずかしくなってきました。;)
Teekin

@KDN Ctrl-gは、emacsおよび多くのUNIXシェルでコマンドをキャンセルするために使用されます。
ジャンギド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.