mhshow: Can now be called as `next' or `prev' as well.
authormarkus schnalke <meillo@marmaro.de>
Sat, 14 Apr 2012 18:37:31 +0000 (20:37 +0200)
committermarkus schnalke <meillo@marmaro.de>
Sat, 14 Apr 2012 18:37:31 +0000 (20:37 +0200)
This is a step in replacing show(1) by mhshow(1).

uip/mhshow.c

index c323867..fa7f256 100644 (file)
@@ -53,6 +53,8 @@ extern char *parts[NPARTS + 1];
 extern char *types[NTYPES + 1];
 extern int userrs;
 
+static enum { SHOW, NEXT, PREV } mode = SHOW;
+
 int debugsw = 0;
 int verbosw = 0;
 
@@ -102,6 +104,11 @@ main(int argc, char **argv)
        setlocale(LC_ALL, "");
 #endif
        invo_name = mhbasename(argv[0]);
+       if (mh_strcasecmp(invo_name, "next")==0) {
+               mode = NEXT;
+       } else if (mh_strcasecmp(invo_name, "prev")==0) {
+               mode = PREV;
+       }
 
        /* read user profile/context */
        context_read();
@@ -122,7 +129,7 @@ main(int argc, char **argv)
                                adios(NULL, "-%s unknown", cp);
 
                        case HELPSW:
-                               snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name);
+                               snprintf(buf, sizeof(buf), "%s [+folder] %s[switches]", invo_name, mode==SHOW ? "[msgs] " : "");
                                print_help(buf, switches, 1);
                                done(1);
                        case VERSIONSW:
@@ -148,6 +155,10 @@ main(int argc, char **argv)
                                continue;
 
                        case FILESW:
+                               if (mode != SHOW) {
+                                       adios(NULL, "Either call mhshow as `%s' or use -file", invo_name);
+                               }
+
                                if (!(cp = *argp++) || (*cp == '-' && cp[1]))
                                        adios(NULL, "missing argument to %s",
                                                        argp[-2]);
@@ -179,8 +190,11 @@ main(int argc, char **argv)
                                adios(NULL, "only one folder at a time!");
                        else
                                folder = getcpy(expandfol(cp));
-               } else
+               } else if (mode != SHOW) {
+                       adios(NULL, "Either call mhshow as `%s' or give message arguments", invo_name);
+               } else {
                        app_msgarg(&msgs, cp);
+               }
        }
 
        /* null terminate the list of acceptable parts/types */
@@ -241,8 +255,19 @@ main(int argc, char **argv)
                /*
                ** message(s) are coming from a folder
                */
-               if (!msgs.size)
-                       app_msgarg(&msgs, seq_cur);
+               if (!msgs.size) {
+                       switch (mode) {
+                       case NEXT:
+                               app_msgarg(&msgs, seq_next);
+                               break;
+                       case PREV:
+                               app_msgarg(&msgs, seq_prev);
+                               break;
+                       default:
+                               app_msgarg(&msgs, seq_cur);
+                               break;
+                       }
+               }
                if (!folder)
                        folder = getcurfol();
                maildir = toabsdir(folder);