mblaze

Unix utilities to deal with Maildir - my mirror
git clone https://pi.duncano.de/git/mblaze.git
Log | Files | Refs | README | COPYING

commit 9e02ec69f18c186b5a23775aeb771965f259fb76
parent 2fc528e8ec81a7094229c3eec02a63d30a19e1a1
Author: Christian Neukirchen <chneukirchen@gmail.com>
Date:   Sun, 31 Jul 2016 19:42:30 +0200

mscan: add -n to only print message number

Diffstat:
man/mscan.1 | 4++++
mscan.c | 39++++++++++++++++++++++++++++++++++++---
2 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/man/mscan.1 b/man/mscan.1 @@ -6,6 +6,7 @@ .Nd print a one line per message mail listing .Sh SYNOPSIS .Nm +.Op Fl n .Op Fl I .Ar msgs\ ... .Sh DESCRIPTION @@ -33,6 +34,9 @@ and the subject of the message. .Pp The options are as follows: .Bl -tag -width Ds +.It Fl n +Only print message numbers +(or file names, if the message is not in the current sequence). .It Fl I Force ISO date output. Use twice to force ISO date and time output. diff --git a/mscan.c b/mscan.c @@ -26,6 +26,7 @@ static char *aliases[32]; static int alias_idx; static int Iflag; +static int nflag; static int curyear; static int curyday; @@ -70,12 +71,35 @@ itsme(char *v) return 0; } +static int init; + +void +numline(char *file) +{ + if (!init) { + // delay loading of the seq until we need to scan the first + // file, in case someone in the pipe updated the map before + char *seq = blaze822_seq_open(0); + blaze822_seq_load(seq); + cur = blaze822_seq_cur(); + init = 1; + } + + while (*file == ' ' || *file == '\t') + file++; + + long lineno = blaze822_seq_find(file); + if (lineno) + printf("%ld\n", lineno); + else + printf("%s\n", file); +} + void oneline(char *file) { int metawidth = 38; - static int init; if (!init) { // delay loading of the seq until we need to scan the first // file, in case someone in the pipe updated the map before @@ -217,14 +241,23 @@ int main(int argc, char *argv[]) { int c; - while ((c = getopt(argc, argv, "I")) != -1) + while ((c = getopt(argc, argv, "In")) != -1) switch(c) { case 'I': Iflag++; break; + case 'n': nflag = 1; break; default: - fprintf(stderr, "Usage: mscan [-I] [msgs...]\n"); + fprintf(stderr, "Usage: mscan [-n] [-I] [msgs...]\n"); exit(1); } + if (nflag) { + if (argc == optind && isatty(0)) + blaze822_loop1(":", numline); + else + blaze822_loop(argc-optind, argv+optind, numline); + return 0; + } + time_t now = time(0); struct tm *tm = localtime(&now); curyear = tm->tm_year;