muttで次の未読メッセージを単一のキーで開くことはできますか?


16

mutt単一のキーで次の未読メッセージを開く方法はありますか?デフォルトでnext-new-then-unreadバインドさTabれているで、次の未読に移動できます。ただし、現在のメールボックスに未読メッセージがない場合は、next-unread-mailbox代わりに使用する必要があります(既定ではバインドされていません)。とにかくこれは最適ではありません。新しいメッセージがある場合、quit mutt、次にmutt再び開くと、「新しい」メッセージを含むメールボックスに移動しません。(おそらく、メールボックスは未読ではなくなります。)

さらに、これらは両方ともインデックスビューの次のメッセージに移動し、ページャービューでメッセージを手動で開く必要があります(でEnter)。どのメールボックスにあるかに関係なく、次の未読メッセージを開く方法はありますか?

私はneomuttを使用しているため、サイドバーコマンドを使用することを見つけました。

macro index,pager , '<sidebar-next-new><sidebar-open><enter>'

問題は、これにより(サイドバーから)次の未読メールボックスが自動的に開かれることです。したがって、現在のメールボックスと別のメールボックスに未読メッセージがある場合、このコマンドは現在のメールボックスではなく他のメールボックスにメッセージを開きます。

回答:


3

まず、次のようなマクロを使用して、新しいメッセージに自動的にジャンプできます。

macro index     .n      "<next-unread-mailbox><enter><next-new-then-unread><enter>" "Go to new mail"

ただし、新しいメッセージがない場合はEnter キーのみが押され、現在のメッセージが開きます。

代替if Maildirを使用~/bin/mutt-new.shする場合、新しいメールがあるかどうかを確認するスクリプトを使用できます。

#!/usr/bin/env sh

if [ "$(find "$HOME"/.muttmail/box1/new -type f -printf '\n' | wc -l)" -eq 0 ]
then
    printf "I think there's no new mail\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    exit 1
fi

echo 'push <next-unread-mailbox><enter><next-new-then-unread><enter>'

これを追加~/.muttrc

macro index     .n        "!~/bin/mutt-new.sh" "Go to new"

編集:

これについては、次のスクリプトがまず現在のメールボックスに新しいメールがあるかどうかを確認します。

#!/usr/bin/env sh

cur_mbox=${1/=/}

echo "$1" >> /tmp/PAR
echo "$cur_mbox" >> /tmp/PAR

if [ ! "$(find "$HOME"/.muttmail/"$cur_mbox"/new -type f -printf '\n' | wc -l)" -eq 0 ]
then
    printf "There is new mail in this mailbox\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    echo 'push <next-new-then-unread><enter>'
elif [ ! "$(find "$HOME"/.muttmail/ -type d -name new -exec ls {} \; | wc -l)" -eq 0 ]
then
    printf "There is new mail in other mailboxes\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    echo 'push <next-unread-mailbox><enter><next-new-then-unread><enter>'
else
    printf "I think there's no new mail\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    exit 1
fi

これを追加~/.muttrc

folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'macro index .n "<enter-command>source \"~/bin/mutt-new.sh $my_folder |\"<return>" "Go to new"'

編集:

あなたが言った:

とにかくこれは最適ではありません。新しいメッセージがある場合、muttを終了してから再びmuttを開くと、「新しい」メッセージを含むメールボックスに移動しません。(おそらく、メールボックスは未読ではなくなります。)

これは次の方法で修正できます。

set mark_old=no

答えてくれてありがとう。このアプローチの主な問題<next-unread-mailbox>は、現在のメールボックスに未読メッセージがあるかどうかに関係なく実行されることです。この場合、他のメールボックスに切り替わり、現在のメールボックス内の次の未読メッセージを開きません。(私の質問による)別の問題は、<next-unread-mailbox>未読/新規メッセージではなく、未読メールボックスを探すことです。
Sparhawk

@Sparhawk:編集を参照してください。それは興味深い質問です。不幸はmutt完全にスクリプトではありません、それは残念です。
アルカディウスドラブチク

@Sparhawk:さらに別の編集を参照してください。私が提案したマクロは、他のマリボックスに移動する前に現在のメールボックスに新しいメールがあれば自動的に開きます。私はまたO、出発後にメッセージのマーキングを無効にする方法を提案しましたmutt
はArkadiusz Drabczyk

ありがとう。現在休暇中ですが、戻ってきたらテストします。有望に見えます。
Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.