mutt
有没有办法用一个键打开下一条未读消息?我可以使用 移动到下一个未读的内容next-new-then-unread
,默认情况下会绑定到Tab。但是,如果当前邮箱中没有未读邮件,那么我必须使用next-unread-mailbox
它(默认情况下未绑定)。无论如何,这是次优的,因为如果我有新消息,退出mutt
,然后mutt
再次打开,这不会将我移动到包含“新”消息的邮箱。 (大概是邮箱不再是未读的。)
此外,这两个操作都会移至索引视图中的下一条消息,并且我必须在寻呼机视图中手动打开该消息(使用Enter)。有没有办法打开下一条未读邮件,无论它位于哪个邮箱?
我正在使用 neomutt,所以我发现的一种部分解决方法是使用侧边栏命令。
macro index,pager , '<sidebar-next-new><sidebar-open><enter>'
问题是这会自动打开下一个未读邮箱(从侧边栏)。因此,如果当前邮箱和另一个邮箱中有未读邮件,此命令将打开另一个邮箱而不是当前邮箱中的邮件。
答案1
对于初学者,您可以使用这样的宏来自动跳转到新消息:
macro index .n "<next-unread-mailbox><enter><next-new-then-unread><enter>" "Go to new mail"
但请注意,如果没有新消息,则Enter 只会按下 键并打开当前消息。
作为替代方案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