mhshow-show-*: Made %e escape the default, i.e. always serialize the output.
authormarkus schnalke <meillo@marmaro.de>
Sat, 14 Apr 2012 16:06:04 +0000 (18:06 +0200)
committermarkus schnalke <meillo@marmaro.de>
Sat, 14 Apr 2012 16:06:04 +0000 (18:06 +0200)
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.

uip/mhshowsbr.c

index e2cde4d..4a7fc0c 100644 (file)
@@ -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);
        }