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 --- man/mscan.1 | 6 ++++++ mscan.c | 27 ++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/man/mscan.1 b/man/mscan.1 index 1ac55c6..622499d 100644 --- a/man/mscan.1 +++ b/man/mscan.1 @@ -123,6 +123,12 @@ if the message is from us). spaces per indentation depth in the thread tree. .It Cm "%" Ns Oo Ar wd Oc Ns Cm "s" The subject of the message (defaults to remaining width). +.It Cm "%" Ns Oo Ar wd Oc Ns Cm "S" +The subject of the message (defaults to remaining width), +with leading +.Sq Li Re: , +.Sq Li Fwd: +etc. stripped. .It Cm "%" Ns Oo Ar wd Oc Ns Cm "b" Human-readable size of the message (in kilobytes). .It Cm "%" Ns Oo Ar wd Oc Ns Cm "F" 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