まず、次のようなマクロを使用して、新しいメッセージに自動的にジャンプできます。
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>
未読/新規メッセージではなく、未読メールボックスを探すことです。