Могу ли я открыть следующее непрочитанное сообщение в Mutt одним ключом?

16

Есть ли способ открыть следующее непрочитанное сообщение muttодним ключом? Я могу перейти к следующему непрочитанному, с next-new-then-unreadкоторым связано Tabпо умолчанию. Тем не менее, если в текущем почтовом ящике нет непрочитанных сообщений, я бы использовал их next-unread-mailbox(по умолчанию не связан). В любом случае это неоптимально, потому что, если у меня есть новое сообщение, выйдите muttи muttснова откройте , это не переместит меня в почтовый ящик, содержащий «новые» сообщения. (Предположительно, почтовый ящик больше не читается.)

Кроме того, оба они переходят к следующему сообщению в представлении индекса, и мне приходится вручную открывать сообщение в представлении пейджера (с помощью Enter). Есть ли способ открыть следующее непрочитанное сообщение, независимо от того, в каком почтовом ящике оно находится?

Я использую neomutt, поэтому я нашел один частичный обходной путь - использование команд боковой панели.

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

Проблема в том, что при этом автоматически открывается следующий непрочитанный почтовый ящик (из боковой панели). Следовательно, если в текущем и другом почтовом ящике есть непрочитанные сообщения, эта команда откроет сообщение в другом почтовом ящике вместо текущего.

Sparhawk
источник

Ответы:

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, не полностью сценарий, и это позор.
Аркадиуш Драбчик
@ Sparhawk: см. Еще одно редактирование. Макрос, который я предложил, автоматически открывает новое электронное письмо в текущем почтовом ящике, если оно есть, прежде чем перейти к другим почтовым ящикам. Я также предложил, как отключить маркировку сообщений как Oпосле ухода mutt.
Аркадиуш Драбчик
Благодарю. Сейчас я в отпуске, но проверю, когда вернусь. Это выглядит многообещающе.
Sparhawk