Puis-je ouvrir le prochain message non lu dans mutt avec une seule clé?

16

Existe-t-il un moyen d'ouvrir le prochain message non lu muttavec une seule clé? Je peux passer au suivant non lu avec next-new-then-unread, qui est lié Tabpar défaut. Cependant, s'il n'y a pas de messages non lus dans la boîte aux lettres actuelle, je devrais utiliser à la next-unread-mailboxplace (non lié par défaut). De toute façon, cela n'est pas optimal, car si j'ai un nouveau message, quittez mutt, puis rouvrez mutt, cela ne me déplacera pas vers la boîte aux lettres contenant les "nouveaux" messages. (Vraisemblablement, la boîte aux lettres n'est plus non lue.)

De plus, ces deux éléments se déplacent vers le message suivant dans la vue d'index, et je dois ouvrir manuellement le message dans la vue de téléavertisseur (avec Enter). Existe-t-il un moyen d' ouvrir le prochain message non lu, quelle que soit la boîte aux lettres dans laquelle il se trouve?

J'utilise neomutt, donc une solution partielle que j'ai trouvée consiste à utiliser les commandes de la barre latérale.

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

Le problème est que cela ouvre automatiquement la prochaine boîte aux lettres non lue (dans la barre latérale). Par conséquent, s'il y a des messages non lus dans la boîte aux lettres actuelle et une autre, cette commande ouvrira le message dans l'autre boîte aux lettres au lieu de l'actuel.

Sparhawk
la source

Réponses:

3

Pour commencer, vous pouvez utiliser une macro comme celle-ci pour passer automatiquement au nouveau message:

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

Notez cependant que s'il n'y a pas de nouveaux messages, seule la Enter touche sera enfoncée et le message actuel sera ouvert.

Comme alternative si if Maildirest utilisé, nous pourrions utiliser un ~/bin/mutt-new.shscript qui vérifierait s'il y a du nouveau courrier:

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

Ajoutez ceci à ~/.muttrc:

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

ÉDITER:

Que diriez-vous de cela: le script suivant vérifiera d'abord s'il y a du nouveau courrier dans la boîte aux lettres actuelle:

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

Ajoutez ceci à ~/.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"'

ÉDITER:

Tu as dit:

C'est sous-optimal de toute façon, car si j'ai un nouveau message, quittez mutt, puis ouvrez à nouveau mutt, cela ne me déplacera pas vers la boîte aux lettres contenant les "nouveaux" messages. (Vraisemblablement, la boîte aux lettres n'est plus non lue.)

Cela peut être résolu par:

set mark_old=no
Arkadiusz Drabczyk
la source
Merci d'avoir répondu. Un problème majeur avec cette approche est qu'elle s'exécute <next-unread-mailbox>indépendamment de la présence de messages non lus dans la boîte aux lettres actuelle. Dans ce cas, il basculerait vers l'autre boîte aux lettres et n'ouvrirait pas le message non lu suivant dans la boîte aux lettres actuelle. Un autre problème (selon ma question) est qu'il <next-unread-mailbox>ne recherche pas les messages non lus / nouveaux mais les boîtes aux lettres non lues .
Sparhawk
@Sparhawk: voir modifier. Voilà une question intéressante. Malheureusement, ce muttn'est pas entièrement scriptable et c'est dommage.
Arkadiusz Drabczyk
@Sparhawk: voir encore une autre modification. La macro que j'ai suggérée ouvre automatiquement un nouvel e-mail dans la boîte aux lettres actuelle s'il y en a avant de passer à d'autres malibox. J'ai également suggéré comment désactiver le marquage des messages Oaprès leur départ mutt.
Arkadiusz Drabczyk
Merci. Je suis en vacances en ce moment, mais je vais le tester à mon retour. Cela semble prometteur.
Sparhawk