muttでの「クリアプロンプト」の再バインド


9

デフォルトでは、のコマンドプロンプトで情報を入力するときに、マニュアルで説明されいるように、でmuttプロンプトをクリアできますCtrlg

^ G n / a中止

この関数をにバインドしようとしていEscapeます。残念ながら、abortマニュアルもソースにも利用可能な関数にはリストされていません。

私はこれを私の中で試しました.muttrc

バインドエディター<esc>の中止

しかしそれはエラーを投げます:

/home/jason/.mutt/muttrcのエラー、143行目:中止:マップにそのような関数はありません

generic)などの別のマップを使用して、などの架空の関数を試しましたclearが、役に立ちませんでした。

Escapeプロンプトラインをクリアするにはどうすればバインドできますか?


1
エスケープ文字(エスケープを押すと送信される)は、矢印、del、F1などのすべてのファンクションキーによって送信されるエスケープシーケンスのプレフィックスでもあるため、エスケープ文字をバインドすることはお勧めできません。
StéphaneChazelas

それは私が考慮しなかった良い点です。それをテストすると、リテラルを送信する^[ためにEscapeを2回送信する必要があるので、それはshowtopperではない可能性があります(とにかく、それに依存するバインドは使用しません)。
jasonwryan 2012

EscEsc2つのESC文字を送信します。また、Esc1回押して約1秒待つこともできます(デフォルトのタイムアウトは、残りのエスケープシーケンスを待ちます)。
ステファンChazelas

はい。最初にそれをバインドする方法を
考え出す必要

回答:


5

キーバインディングでは不可能です。Ctrl-Gマクロまたはキーバインディング処理よりも低いレベルでmuttにハードコーディングされています(mutt_getch()muttのソースコードで、でエラーを返すmuttのすべてのユーザー入力のコアを参照^G)。

macro editor \e '^G'

どちらも機能しません。

あなたができることは^G、押したときに送信するように端末を設定することですEscape

xtermの場合:

xterm -xrm 'XTerm.VT100.translations: #override <KeyPress> Escape: string(0x7)'

を使用している場合はscreen、次のこともできます

screen -X bindkey $'\e' stuff $'\a'

muttを呼び出す前に、後でそれを復元します(残念ながら、画面にウィンドウごとのキーバインディングを画面に表示できないようです)。また、電子メールメッセージの編集者がviである場合も問題になります。


賛成:質問に答えるため(つまり、不可能)。「ハードコードされた...下位レベル」について詳しく教えてください。また、この回避策は独創的ですが、他の多くのターミナルプログラムでEscapeを使用しているため、実際には実行できません。
jasonwryan 2012

回答を詳細に編集しました。Escが他のプログラムにバインドされていることに驚いています。Escは通常、上記のコメントで述べた理由により、私が知っているアプリケーションにはありません。
ステファンChazelas

2

エスケープControlGもバインドするのは本当に悪い考えのようです。私はmuttソリューションを探してここに来ましたが、解決策はないと思われるので、偶然これに遭遇した人のために私がやっていることから答えをあげます。最適ではありませんが、他のプログラムには影響しません。

macro editor \e "<enter><shell-escape>xdotool key control+g<enter>"

または

macro editor \e "<enter><shell-escape>xsendkey Control+g<enter>"

xdotoolやxsendkeyのようなものを使用してcontrol + gを偽造することは機能し、他の場所でエスケープを台無しにすることはありません。行エディターを終了するまでに視覚的な遅延がありますが、インデックスバインディングはすぐに機能し、インデックスバインディングを使用するとすぐに視覚的な遅延がなくなります。最初のエンターは、muttが単に「....」と入力して、それをヘッダーや検索用語などにしないようにするために必要です。


0

このソリューションは非常に悪いので、作者はMuttのソースコードを編集して^ Gを取り除くことを選択しました

警告:このソリューションは、OSX、Emacs、およびCtrl+ を使用する他のアプリケーションと互換性がないようですG

Muttでの最初の日の後、私はVimで^ Gを誤って使用していたようでした...次に、i3ウィンドウマネージャーxfce-terminalで、ここで機能しているように見えるものを試しました。

に次の行を追加しました~/.i3/config

bindsym --release Escape exec --no-startup-id xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"

Vimで機能し"\[Escape]\[Control]\[g]"なく"\[Control]\[g]"なったために使用する必要がありました。

あなたはI3を使用していない場合、私はあなたが使用することができると思うxbindkeysを実行するxvkbd -xsendevent -text "\[Escape]\[Control]\[g]"際にEsc押圧されます。

それは美しい解決策ではありません...それはあなたのEsc鍵をいくつかのプログラムで使用できなくする可能性がありますが、少なくともここではそれは問題ないようです。

編集:

私はそれを今見るCtrl+のG一部は、ファイルにVimのショーの位置になります。今のところ、それほど劇的なことはありません。

このリンクはより良い解決策を持っているようですが、urxvtの場合http : //www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

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