我可以用一个键打开Mutt中的下一条未读邮件吗?


16

有没有办法mutt用一个键打开下一条未读消息?我可以使用移至下一个未读next-new-then-unreadTab默认情况下绑定。但是,如果当前邮箱中没有未读邮件,则必须使用next-unread-mailbox(默认情况下未绑定)。无论如何,这不是最佳选择,因为如果我有新消息,请退出mutt,然后mutt再次打开,这不会使我进入包含“新”消息的邮箱。(假定邮箱不再未读。)

另外,这两个选项都移至索引视图中的下一条消息,并且我必须手动在分页器视图中打开该消息(带有Enter)。有没有办法打开下一条未读邮件,无论它在哪个邮箱中?

我正在使用neomutt,因此发现的一种局部解决方法是使用侧边栏命令。

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

问题在于,这会自动(从侧边栏)打开下一个未读邮箱。因此,如果当前邮箱和另一个邮箱中有未读邮件,此命令将打开另一个邮箱而不是当前邮箱中的邮件。

Answers:


3

对于初学者,您可以使用这样的宏来自动跳转到新消息:

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

感谢您的回答。这种方法的主要问题是,<next-unread-mailbox>不管当前邮箱中是否有未读邮件,它都将运行。在这种情况下,它将切换到另一个邮箱,而不打开当前邮箱中的下一条未读邮件。另一个问题(按照我的问题)是<next-unread-mailbox>不查找未读/新邮件,而是查找未读邮箱
Sparhawk

@Sparhawk:请参阅编辑。这是一个有趣的问题。不幸的mutt是不能完全编写脚本,这是一种耻辱。
Arkadiusz Drabczyk

@Sparhawk:再看一遍。我建议使用的宏会在移动到其他邮箱之前自动在当前邮箱中打开新电子邮件。我还建议了如何O在离开后禁用标记消息mutt
Arkadiusz Drabczyk

谢谢。我目前正在休假,但是回来时我会对其进行测试。看起来很有希望。
Sparhawk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.