From b4df49565fad59748e05bda5cd186d8cc1792ffa Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Wed, 10 Aug 2016 17:48:33 +0200 Subject: mscan: add %S for stripped subject --- mscan.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'mscan.c') diff --git a/mscan.c b/mscan.c index b2b5cb2..684faae 100644 --- a/mscan.c +++ b/mscan.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -151,7 +152,7 @@ fmt_date(struct message *msg, int w, int iso) } static char * -fmt_subject(struct message *msg, char *file) +fmt_subject(struct message *msg, char *file, int strip) { static char subjdec[100]; char *subj = "(no subject)"; @@ -167,6 +168,25 @@ fmt_subject(struct message *msg, char *file) blaze822_decode_rfc2047(subjdec, subj, sizeof subjdec - 1, "UTF-8"); + if (strip) { + size_t i; + for (i = 0; subjdec[i]; ) { + if (subjdec[i] == ' ') { + i++; + continue; + } else if (strncasecmp("re:", subjdec+i, 3) == 0 || + strncasecmp("aw:", subjdec+i, 3) == 0) { + i += 3; + continue; + } else if (strncasecmp("fwd:", subjdec+i, 4) == 0) { + i += 4; + continue; + } + break; + } + return subjdec + i; + } + return subjdec; } @@ -382,12 +402,13 @@ oneline(char *file) } break; case 's': + case 'S': if (w) wleft -= u8putstr(stdout, - fmt_subject(msg, file), w, 1); + fmt_subject(msg, file, *f == 'S'), w, 1); else wleft -= u8putstr(stdout, - fmt_subject(msg, file), wleft, 0); + fmt_subject(msg, file, *f == 'S'), wleft, 0); break; case 'b': { -- cgit 1.4.1