list: only show index line if any filter applied

pull/1/merge
Christian Neukirchen 8 years ago
parent 698789336d
commit 597a035dbf

@ -41,8 +41,9 @@ static int Cflag;
static int iflag; static int iflag;
static long icount; static long icount;
static long iseen; static long iunseen;
static long iflagged; static long iflagged;
static long imatched;
void void
list(char *prefix, char *file) list(char *prefix, char *file)
@ -52,6 +53,7 @@ list(char *prefix, char *file)
char *f = strstr(file, ":2,"); char *f = strstr(file, ":2,");
if (!f) if (!f)
return; return;
icount++;
f += 3; f += 3;
while (*f) { while (*f) {
if (flags[(unsigned int)*f] == -1) if (flags[(unsigned int)*f] == -1)
@ -68,14 +70,13 @@ list(char *prefix, char *file)
char *f = strstr(file, ":2,"); char *f = strstr(file, ":2,");
if (!f) if (!f)
return; return;
icount++; imatched++;
while (*f) { if (!flagset)
if (*f == 'S') icount++;
iseen++; if (!strchr(f, 'S'))
if (*f == 'F') iunseen++;
iflagged++; if (strchr(f, 'F'))
f++; iflagged++;
}
return; return;
} }
@ -197,11 +198,12 @@ main(int argc, char *argv[])
int maildir = 0; int maildir = 0;
long gcount = icount; long gcount = icount;
long gseen = iseen; long gunseen = iunseen;
long gflagged = iflagged; long gflagged = iflagged;
long gmatched = imatched;
icount = 0; icount = 0;
iseen = 0; iunseen = 0;
iflagged = 0; iflagged = 0;
snprintf(subdir, sizeof subdir, "%s/cur", argv[i]); snprintf(subdir, sizeof subdir, "%s/cur", argv[i]);
@ -221,21 +223,22 @@ main(int argc, char *argv[])
if (!maildir) if (!maildir)
listdir(argv[i]); listdir(argv[i]);
if (iflag && icount) if (iflag && imatched)
printf("%6ld unseen %3ld flagged %6ld msg %s\n", printf("%6ld unseen %3ld flagged %6ld msg %s\n",
icount-iseen, iflagged, icount, argv[i]); iunseen, iflagged, icount, argv[i]);
icount = gcount; icount = gcount;
iseen = gseen; iunseen = gunseen;
iflagged = gflagged; iflagged = gflagged;
imatched = gmatched;
} else if (S_ISREG(st.st_mode)) { } else if (S_ISREG(st.st_mode)) {
list(0, argv[i]); list(0, argv[i]);
} }
} }
if (icount || iseen || iflagged) if (iflag && imatched)
printf("%6ld unseen %3ld flagged %6ld msg\n", printf("%6ld unseen %3ld flagged %6ld msg\n",
icount-iseen, iflagged, icount); iunseen, iflagged, icount);
exit(0); exit(0);

Loading…
Cancel
Save