diff options
Diffstat (limited to 'mscan.c')
-rw-r--r-- | mscan.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/mscan.c b/mscan.c index b2b5cb2..684faae 100644 --- a/mscan.c +++ b/mscan.c @@ -11,6 +11,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <strings.h> #include <time.h> #include <unistd.h> #include <wchar.h> @@ -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': { |