> +     case 'e':
> +             /* xterm/rxvt compatibility */
> +             *argv[0] = '-';
> +             argc++, argv--;
> +             break;
>       case 'f':
>               opt_font = EARGF(usage());
>               break;


Ha,ha, ha. Good hack, but it fails. Think in something like
st -e -sh. I also don't understand why to remove -e from
the man page. If the patch is only because you want to
remove the goto, then you are wrong. This goto is a perfect
example of a correct goto and it is even beatiful. If you agree
I will apply this version of your patch:


diff --git a/st.1 b/st.1
index a9fec15..56dfa3a 100644
--- a/st.1
+++ b/st.1
@@ -20,6 +20,7 @@ st \- simple terminal
 .RB [ \-v ]
 .RB [ \-e
 .IR command ...]
+.RI [ command ...]
 .SH DESCRIPTION
 .B st
 is a simple terminal emulator.
diff --git a/st.c b/st.c
index 7051a4a..c5120d0 100644
--- a/st.c
+++ b/st.c
@@ -4022,12 +4022,12 @@ void
 usage(void) {
        die("%s " VERSION " (c) 2010-2015 st engineers\n" \
        "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
-       "          [-i] [-t title] [-w windowid] [-e command ...]\n", argv0);
+       "          [-i] [-t title] [-w windowid] [-e command ...][command 
...]\n",
+       argv0);
 }
 
 int
 main(int argc, char *argv[]) {
-       char *titles;
        uint cols = 80, rows = 24;
 
        xw.l = xw.t = 0;
@@ -4042,14 +4042,8 @@ main(int argc, char *argv[]) {
                opt_class = EARGF(usage());
                break;
        case 'e':
-               /* eat all remaining arguments */
-               if(argc > 1) {
-                       opt_cmd = &argv[1];
-                       if(argv[1] != NULL && opt_title == NULL) {
-                               titles = xstrdup(argv[1]);
-                               opt_title = basename(titles);
-                       }
-               }
+               if (argc > 1)
+                       --argc, ++argv;
                goto run;
        case 'f':
                opt_font = EARGF(usage());
@@ -4076,6 +4070,12 @@ main(int argc, char *argv[]) {
        } ARGEND;
 
 run:
+       if(argc > 0) {
+               /* eat all remaining arguments */
+               opt_cmd = argv;
+               if(!opt_title)
+                       opt_title = basename(xstrdup(argv[0]));
+       }
        setlocale(LC_CTYPE, "");
        XSetLocaleModifiers("");
        tnew(cols? cols : 1, rows? rows : 1);


Reply via email to