Kann ich die nächste ungelesene Nachricht in mutt mit einem einzigen Schlüssel öffnen?

16

Gibt es eine Möglichkeit, die nächste ungelesene Nachricht muttmit einem einzigen Schlüssel zu öffnen ? Ich kann mit zum nächsten ungelesenen wechseln, das standardmäßig next-new-then-unreadgebunden ist Tab. Wenn sich jedoch keine ungelesenen Nachrichten im aktuellen Postfach befinden, muss ich next-unread-mailboxstattdessen verwenden (standardmäßig ungebunden). Dies ist ohnehin nicht optimal, denn wenn ich eine neue Nachricht habe, beende sie muttund öffne sie dann mutterneut. Dadurch werde ich nicht in die Mailbox verschoben, die die "neuen" Nachrichten enthält. (Vermutlich ist die Mailbox nicht mehr ungelesen.)

Außerdem wechseln beide zur nächsten Nachricht in der Indexansicht, und ich muss die Nachricht manuell in der Pager-Ansicht öffnen (mit Enter). Gibt es eine Möglichkeit, die nächste ungelesene Nachricht zu öffnen , unabhängig davon, in welchem ​​Postfach sie sich befindet?

Ich verwende neomutt, daher habe ich eine teilweise Problemumgehung gefunden, indem ich die Sidebar-Befehle verwende.

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

Das Problem ist, dass dadurch automatisch das nächste ungelesene Postfach (aus der Seitenleiste) geöffnet wird. Wenn sich also ungelesene Nachrichten in der aktuellen und einer anderen Mailbox befinden, öffnet dieser Befehl die Nachricht in der anderen Mailbox anstelle der aktuellen.

Sparhawk
quelle

Antworten:

2

Für den Anfang können Sie ein Makro wie dieses verwenden, um automatisch zur neuen Nachricht zu springen:

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

Beachten Sie jedoch, dass, wenn keine neuen Nachrichten vorhanden sind, nur die Enter Taste gedrückt und die aktuelle Nachricht geöffnet wird.

Als Alternative Maildirkönnten wir ein ~/bin/mutt-new.shSkript verwenden, das prüft, ob es neue Mails gibt:

#!/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>'

Fügen Sie dies hinzu zu ~/.muttrc:

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

BEARBEITEN:

Wie wäre es damit: Das folgende Skript prüft zunächst, ob im aktuellen Postfach neue E-Mails vorhanden sind:

#!/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

Fügen Sie dies hinzu zu ~/.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"'

BEARBEITEN:

Du sagtest:

Das ist ohnehin nicht optimal, denn wenn ich eine neue Nachricht habe, beende mutt und öffne dann mutt erneut, wird dies mich nicht in die Mailbox verschieben, die die "neuen" Nachrichten enthält. (Vermutlich ist die Mailbox nicht mehr ungelesen.)

Dies kann behoben werden durch:

set mark_old=no
Arkadiusz Drabczyk
quelle
Danke für die Antwort. Ein Hauptproblem bei diesem Ansatz ist, dass er <next-unread-mailbox>unabhängig davon ausgeführt wird, ob sich ungelesene Nachrichten im aktuellen Postfach befinden. In diesem Fall wird zum anderen Postfach gewechselt und die nächste ungelesene Nachricht im aktuellen Postfach nicht geöffnet. Ein weiteres Problem (gemäß meiner Frage) besteht darin, dass <next-unread-mailbox>nicht nach ungelesenen / neuen Nachrichten, sondern nach ungelesenen Postfächern gesucht wird .
Sparhawk
@Sparhawk: siehe bearbeiten. Das ist eine interessante Frage. Leider muttist es nicht vollständig skriptfähig und es ist eine Schande.
Arkadiusz Drabczyk
@Sparhawk: siehe noch eine Bearbeitung. Mit dem von mir vorgeschlagenen Makro wird automatisch eine neue E-Mail in der aktuellen Mailbox geöffnet, bevor mit anderen Maliboxen fortgefahren wird. Ich schlug auch vor, die Markierung von Nachrichten Onach dem Verlassen zu deaktivieren mutt.
Arkadiusz Drabczyk
Vielen Dank. Ich bin gerade im Urlaub, aber ich werde es testen, wenn ich zurückkomme. Es sieht vielversprechend aus.
Sparhawk