mscan: add %S for stripped subject

pull/2/head
Christian Neukirchen 8 years ago
parent 2c0ace3d82
commit b4df49565f

@ -123,6 +123,12 @@ if the message is from us).
spaces per indentation depth in the thread tree. spaces per indentation depth in the thread tree.
.It Cm "%" Ns Oo Ar wd Oc Ns Cm "s" .It Cm "%" Ns Oo Ar wd Oc Ns Cm "s"
The subject of the message (defaults to remaining width). 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" .It Cm "%" Ns Oo Ar wd Oc Ns Cm "b"
Human-readable size of the message (in kilobytes). Human-readable size of the message (in kilobytes).
.It Cm "%" Ns Oo Ar wd Oc Ns Cm "F" .It Cm "%" Ns Oo Ar wd Oc Ns Cm "F"

@ -11,6 +11,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <strings.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <wchar.h> #include <wchar.h>
@ -151,7 +152,7 @@ fmt_date(struct message *msg, int w, int iso)
} }
static char * static char *
fmt_subject(struct message *msg, char *file) fmt_subject(struct message *msg, char *file, int strip)
{ {
static char subjdec[100]; static char subjdec[100];
char *subj = "(no subject)"; 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"); 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; return subjdec;
} }
@ -382,12 +402,13 @@ oneline(char *file)
} }
break; break;
case 's': case 's':
case 'S':
if (w) if (w)
wleft -= u8putstr(stdout, wleft -= u8putstr(stdout,
fmt_subject(msg, file), w, 1); fmt_subject(msg, file, *f == 'S'), w, 1);
else else
wleft -= u8putstr(stdout, wleft -= u8putstr(stdout,
fmt_subject(msg, file), wleft, 0); fmt_subject(msg, file, *f == 'S'), wleft, 0);
break; break;
case 'b': case 'b':
{ {

Loading…
Cancel
Save