From da25188de43095cc8fd78094e538ec868e910a44 Mon Sep 17 00:00:00 2001 From: Philipp Takacs Date: Fri, 9 Sep 2016 23:06:37 +0200 Subject: [PATCH] add -format to pick this leads to remove scan --- etc/Makefile.in | 2 +- etc/pick.default | 1 + man/pick.man1 | 4 ++++ uip/Makefile.in | 4 ++-- uip/pick.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 etc/pick.default diff --git a/etc/Makefile.in b/etc/Makefile.in index aa0aa25..7b2934e 100644 --- a/etc/Makefile.in +++ b/etc/Makefile.in @@ -32,7 +32,7 @@ STATIC_FILES = components digestcomps distcomps forwcomps \ replcomps replgroupcomps scan.MMDDYY scan.YYYYMMDD \ scan.nmh scan.mailx scan.nomime scan.size scan.time \ scan.timely scan.unseen scan.meillo scan.default \ - mhn.defaults repllistcomps + mhn.defaults repllistcomps pick.default # ========= DEPENDENCIES FOR BUILDING ========== diff --git a/etc/pick.default b/etc/pick.default new file mode 100644 index 0000000..0ab1bed --- /dev/null +++ b/etc/pick.default @@ -0,0 +1 @@ +%(msg) diff --git a/man/pick.man1 b/man/pick.man1 index 076f99d..4f223df 100644 --- a/man/pick.man1 +++ b/man/pick.man1 @@ -39,6 +39,10 @@ pick \- select messages by content .IR date ] .RB [ \-datefield .IR field ] +.RB [ \-format +.IR formatfile ] +.RB [ \-width +.IR columns ] .RB [ \-sequence .I name \&...] diff --git a/uip/Makefile.in b/uip/Makefile.in index e7e7b46..cd43aaa 100644 --- a/uip/Makefile.in +++ b/uip/Makefile.in @@ -172,8 +172,8 @@ new: new.o $(LOCALLIBS) packf: packf.o dropsbr.o $(LOCALLIBS) $(LINK) packf.o dropsbr.o $(LINKLIBS) -pick: pick.o $(LOCALLIBS) - $(LINK) pick.o $(LINKLIBS) +pick: pick.o scansbr.o termsbr.o $(LOCALLIBS) + $(LINK) pick.o scansbr.o termsbr.o $(LINKLIBS) $(TERMLIB) print-mimetype: print-mimetype.sh cp $(srcdir)/print-mimetype.sh print-mimetype diff --git a/uip/pick.c b/uip/pick.c index 4cb33fb..3e250a7 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include #ifdef HAVE_SYS_TIME_H # include @@ -63,9 +65,13 @@ static struct swit switches[] = { { "list", 0 }, #define NLISTSW 21 { "nolist", 2 }, -#define VERSIONSW 22 +#define FORMATSW 22 + { "format format", 0 }, +#define WIDTHSW 23 + { "width columns", 0 }, +#define VERSIONSW 24 { "Version", 0 }, -#define HELPSW 23 +#define HELPSW 25 { "help", 0 }, { NULL, 0 } }; @@ -83,10 +89,12 @@ static int listsw = -1; void putzero_done(); +static void printmsg(FILE *, struct msgs *, int, char *, int); + int main(int argc, char **argv) { - int publicsw = -1, zerosw = 1, vecp = 0; + int publicsw = -1, zerosw = 1, vecp = 0, width = 0; unsigned int seqp = 0; int lo, hi, msgnum; char *maildir, *folder = NULL, buf[100]; @@ -94,9 +102,11 @@ main(int argc, char **argv) char *seqs[NUMATTRS + 1], *vec[MAXARGS]; struct msgs_array msgs = { 0, 0, NULL }; struct msgs *mp; + char *form = NULL; + char *fmtstr; FILE *fp; - if (atexit(putzero_done) != 0) { + if (atexit(putzero_done) != 0) { adios(EX_OSERR, NULL, "atexit failed"); } @@ -109,6 +119,10 @@ main(int argc, char **argv) arguments = getarguments(invo_name, argc, argv, 1); argp = arguments; + if (strcmp(invo_name, "scan")==0) { + form = scanformat; + } + while ((cp = *argp++)) { if (*cp == '-') { if (*++cp == '-') { @@ -193,6 +207,18 @@ main(int argc, char **argv) case NLISTSW: listsw = 0; continue; + case FORMATSW: + if (!(form = *argp++) || *form == '-') { + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); + } + continue; + case WIDTHSW: + if (!(cp = *argp++) || *cp == '-') { + adios(EX_USAGE, NULL, "missing argument to %s", + argp[-2]); + } + width = atoi(cp); + continue; } } if (*cp == '+' || *cp == '@') { @@ -205,6 +231,8 @@ main(int argc, char **argv) } vec[vecp] = NULL; + fmtstr = new_fs(form, "pick.default"); + /* ** If we didn't specify which messages to search, ** then search the whole folder. @@ -271,8 +299,9 @@ main(int argc, char **argv) if (msgnum > hi) hi = msgnum; - if (listsw) - printf("%s\n", m_name(msgnum)); + if (listsw) { + printmsg(fp, mp, msgnum, fmtstr, width); + } } else { /* if it doesn't match, then unselect it */ unset_selected(mp, msgnum); @@ -320,6 +349,31 @@ putzero_done() printf("0\n"); } +static void +printmsg(FILE *f, struct msgs *mp, int msgnum, char *fmtstr, int width) +{ + int seqnum; + int state; + boolean unseen = FALSE; + + fseek(f, 0L, SEEK_SET); + + seqnum = seq_getnum(mp, seq_unseen); + unseen = in_sequence(mp, seqnum, msgnum); + + switch (state = scan(f, msgnum, SCN_FOLD, fmtstr, + width, msgnum==mp->curmsg, unseen)) { + case SCNMSG: + case SCNERR: + break; + case SCNEOF: + advise(NULL, "message %d: empty", msgnum); + break; + default: + adios(EX_SOFTWARE, NULL, "scan() botch(%d)", state); + } +} + static struct swit parswit[] = { #define PRAND 0 -- 1.7.10.4