mutt - このようなメッセージをフィルタリングする

mutt - このようなメッセージをフィルタリングする

GMail の「これらのメッセージに似たフィルター」機能を再現したいと思っています。基本的には、* などのキーを mutt にバインドして、表示されるメッセージを同じ送信者 (または先頭に ; が付いている送信者) から送信されたメッセージに「制限」できるようにしたいと考えています。

macro index * "<enter-command>set sender=display-address<enter><limit>$sender<enter>" "Filter Messages Like"

上記のマクロ アプローチを試していますが、送信者アドレスを mutt の変数に読み込むのに苦労しています。マクロはここでの正しい方法でしょうか? また、メッセージ ヘッダーを変数に読み込む正しい方法は何でしょうか?

答え1

<display-address> :push @残念ながら、関数から変数を設定することはできません。関数を呼び出したり、 neomutt で lua を使用したりできたとしても:exec display-address、下のバーに表示されますが、変数は空のままです。

今日、#neomutt IRC でこの問題について相談したところ、現時点での最善の選択肢は一時ファイルを使用することです。

  • このマクロはメッセージを formail にパイプしfrom header、それを awk に渡して電子メールアドレスのみを取得し、出力を /tmp/sender にリダイレクトします。
  • 変数$my_senderを/tmp/senderの内容で設定する
  • $my_senderでインデックスを制限する
macro index,pager * \
"<pipe-message>formail -X from:|awk -F'[<>]' '{print $2}'>/tmp/sender<enter>\
:set my_sender=\"`cat /tmp/sender`\"\n\
l~f \"$my_sender\"\n" \
"Filter Messages Like"

要件: formail

または、他のコマンドを使用してメッセージから電子メール アドレスを解析することもできます。


編集: neomutt セッションごとに 1 回のみ動作します。マクロは二重引用符で囲まれているため、マクロ内の変数の展開に問題がある可能性があります。そのため、少なくとも簡単には、まだ不可能である可能性があります。

答え2

この回答はヤクブ・ジンドラの回答。残念ながら、私は彼の正しい回答にコメントとして投稿するのに十分な評判を持っていませんでしたが、これが同じ問題に遭遇した他の人の役に立つかもしれないと思いました。

これは、1 回限りの拡張の問題を解決できるマクロの回避策です。

macro index,pager k "<pipe-message>formail -X from:|awk -F'[<>]' '{print \"set my_tmp_pipe_decode=\\\"\"$2\"\\\"\" }'>/tmp/sender<enter>:source /tmp/sender<enter>l~f $my_tmp_pipe_decode<enter>" "Filter Messages Like"

cat主な違いは、ファイルを する代わりに、sourceを試したことです。この方法では、変数の展開の問題は発生せず、1 回のセッションで何度でも機能します。どうやら、 は内部 mutt コマンドであるため、sourceと比較して 1 回限りの展開ではありませんが、は外部 bash コマンドであるため、展開する必要があります。catcat

ここでも、功績は Jakub Jindra 氏に帰せられるべきでしょう。

関連情報