From: markus schnalke Date: Sat, 14 Apr 2012 16:06:04 +0000 (+0200) Subject: mhshow-show-*: Made %e escape the default, i.e. always serialize the output. X-Git-Tag: mmh-thesis-end~85 X-Git-Url: http://git.marmaro.de/?p=mmh;a=commitdiff_plain;h=a20d405db09b7ccca74d3e8c57550883da49e1ae mhshow-show-*: Made %e escape the default, i.e. always serialize the output. Never invoke several content display processes in parallel, but always wait for the previous to finish before executing the next one. The idea behind this is generating console output only, but not spawning any graphical windows. All output of displaying one message should go to one single pager invocation. Any other kinds of attachments are to be stored and afterwards displayed manually. This is the way all the other MUAs do it and it matches the modern understanding of emails: a message and attachments. This is contrary to the original design of MIME, true. Also, removed the %p alias for the %l escape. --- diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index e2cde4d..4a7fc0c 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -51,7 +51,7 @@ static void show_single_message(CT, char *); static void DisplayMsgHeader(CT, char *); static int show_switch(CT, int); static int show_content(CT, int); -static int show_content_aux2(CT, int, char *, char *, int, int, int, int); +static int show_content_aux2(CT, int, char *, char *, int, int, int); static int show_text(CT, int); static int show_multi(CT, int); static int show_multi_internal(CT, int); @@ -182,7 +182,7 @@ DisplayMsgHeader(CT ct, char *form) /* NOTREACHED */ default: - xpid = -child_id; + xpid = child_id; break; } } @@ -273,12 +273,11 @@ show_content(CT ct, int alternate) /* ** Parse the display string for displaying generic content */ - int show_content_aux(CT ct, int alternate, char *cp, char *cracked) { int fd, len, buflen, quoted; - int xstdin, xlist, xtty; + int xstdin, xlist; char *bp, *pp, *file, buffer[BUFSIZ]; CI ci = &ct->c_ctinfo; @@ -298,7 +297,6 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) xlist = 0; xstdin = 0; - xtty = 0; if (cracked) { strncpy(buffer, cp, sizeof(buffer)); @@ -353,15 +351,9 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) } break; - case 'e': - /* exclusive execution */ - xtty = 1; - break; - case 'F': - /* %e, %f, and stdin is terminal not content */ + /* %f, and stdin is terminal not content */ xstdin = 1; - xtty = 1; /* and fall... */ case 'f': @@ -380,7 +372,6 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) pp = bp; break; - case 'p': case 'l': /* ** display listing prior to displaying content @@ -455,20 +446,24 @@ raw: got_command: return show_content_aux2(ct, alternate, cracked, buffer, - fd, xlist, xstdin, xtty); + fd, xlist, xstdin); } /* ** Routine to actually display the content */ - static int show_content_aux2(CT ct, int alternate, char *cracked, - char *buffer, int fd, int xlist, int xstdin, int xtty) + char *buffer, int fd, int xlist, int xstdin) { pid_t child_id; + if (xpid) { + pidcheck(pidwait(xpid, NOTOK)); + xpid = 0; + } + if (debugsw || cracked) { fflush(stdout); @@ -483,13 +478,6 @@ show_content_aux2(CT ct, int alternate, char *cracked, fprintf(stderr, " using command %s\n", buffer); } - if (xpid < 0 || (xtty && xpid)) { - if (xpid < 0) - xpid = -xpid; - pidcheck(pidwait(xpid, NOTOK)); - xpid = 0; - } - if (xlist) { if (ct->c_type == CT_MULTIPART) list_content(ct, -1, 1, 0, 0); @@ -691,7 +679,7 @@ static int show_multi_aux(CT ct, int alternate, char *cp) { int len, buflen, quoted; - int xlist, xtty; + int xlist; char *bp, *pp, *file, buffer[BUFSIZ]; struct multipart *m = (struct multipart *) ct->c_ctparams; struct part *part; @@ -722,7 +710,6 @@ show_multi_aux(CT ct, int alternate, char *cp) } xlist = 0; - xtty = 0; /* get buffer ready to go */ bp = buffer; @@ -771,16 +758,7 @@ show_multi_aux(CT ct, int alternate, char *cp) } break; - case 'e': - /* exclusive execution */ - xtty = 1; - break; - case 'F': - /* %e and %f */ - xtty = 1; - /* and fall... */ - case 'f': /* insert filename(s) containing content */ { @@ -806,7 +784,6 @@ show_multi_aux(CT ct, int alternate, char *cp) } break; - case 'p': case 'l': /* ** display listing prior to displaying content @@ -880,7 +857,7 @@ raw: } return show_content_aux2(ct, alternate, NULL, buffer, - NOTOK, xlist, 0, xtty); + NOTOK, xlist, 0); } @@ -910,7 +887,7 @@ show_message_rfc822(CT ct, int alternate) /* default method for message/rfc822 */ if (ct->c_subtype == MESSAGE_RFC822) { - cp = (ct->c_showproc = getcpy("%pshow -file '%F'")); + cp = (ct->c_showproc = getcpy("%lshow -file %F")); return show_content_aux(ct, alternate, cp, NULL); }