blog:mutt_folder_browser_et_ordre

Mutt, folder_browser et ordre

Lorsqu'on utilise des Maildir, Mutt n'est pas capable de trier correctement les boîtes (folders) par date de dernière modification. Il existe un patch (cf. https://dev.mutt.org/trac/wiki/PatchList, chercher maildir-mtime) pour les versions 1.4 et 1.5 de Mutt ; je n'ai pas testé.

Pour rappel :

  • un maildir se présente comme un répertoire contenant trois sous-répertoires cur/, new/ et tmp/ ;
  • les messages arrivent dans tmp/ ;
  • une fois reçus, ils sont « copiés » dans new/ ;
  • lorsque le MUA parcoure la boîte, il les « déplace » dans cur/.

Il n'y a ni déplacement ni copie mais ça n'est pas le sujet. Bref, à la fin, le mtime et l'atime de ces trois sous-répertoires a changé… mais pas ceux du répertoire parent, justement le répertoire que l'on voudrait voir modifié !

Mutt a pourtant une option sort_browser :

.muttrc
set sort_browser=reverse-date

Pour l'exploiter, il faut que les maildirs voient leur mtime changé. Pour cela, utilisons le script suivant :

mtime_maildirs
#!/usr/bin/env perl
#
# $Id: 3fe93bc26d54c058edfb7a25d4667f887b1e8f8d $
#
 
use Getopt::Std;
use File::stat;
 
if ( $#ARGV == 0 ) {
    exit 1;
}
else {
 
    my %opts;
    getopts( 'd:', \%opts );
 
    opendir( MD, $opts{'d'} ) or die "$opts{'d'}: $?\n";
    foreach ( sort readdir(MD) ) {
        if (    -d "$opts{'d'}/$_/new"
            and -d "$opts{'d'}/$_/cur"
            and -d "$opts{'d'}/$_/tmp" )
        {
            my $mtime = stat("$opts{'d'}/$_/new")->mtime;
            utime( $mtime, $mtime, "$opts{'d'}/$_" ) or
                do { warn "$_: $?\n"; }
        }
    }
    closedir(MD);
}

Il attend une option -d path/to/maildir/collection et change le mtime des maildirs trouvés1) à partir de celui de leur new/.

À utiliser avec cron(8) ou via OfflineIMAP avec postsynchook par exemple :

.offlineimaprc
[account foo]
...
postsynchook = mtime_maildirs -d ~/mail/foo/ && notmuch new

Et voilà, lorsqu'on veut changer de maildir ou lorsqu'on déplace des messages en sélectionnant un maildir de destination, les plus « récents » apparaissent en premier (voir folder_format pour choisir les informations à afficher).


1)
Oui, j'ai présupposé qu'un répertoire contenant trois répertoires cur, new et tmp est un maildir.
  • blog/mutt_folder_browser_et_ordre.txt
  • Dernière modification : 2016/07/18 21:53
  • de pc