diff options
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -247,7 +247,7 @@ static CSIEscape escseq; | |||
247 | static int cmdfd; | 247 | static int cmdfd; |
248 | static pid_t pid; | 248 | static pid_t pid; |
249 | static Selection sel; | 249 | static Selection sel; |
250 | static char *opt_cmd = NULL; | 250 | static char **opt_cmd = NULL; |
251 | static char *opt_title = NULL; | 251 | static char *opt_title = NULL; |
252 | static char *opt_class = NULL; | 252 | static char *opt_class = NULL; |
253 | 253 | ||
@@ -547,15 +547,12 @@ void | |||
547 | execsh(void) { | 547 | execsh(void) { |
548 | char **args; | 548 | char **args; |
549 | char *envshell = getenv("SHELL"); | 549 | char *envshell = getenv("SHELL"); |
550 | DEFAULT(envshell, "sh"); | ||
551 | 550 | ||
552 | if(opt_cmd) | 551 | DEFAULT(envshell, "sh"); |
553 | args = (char*[]){"sh", "-c", opt_cmd, NULL}; | ||
554 | else | ||
555 | args = (char*[]){envshell, "-i", NULL}; | ||
556 | |||
557 | putenv("TERM="TNAME); | 552 | putenv("TERM="TNAME); |
553 | args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL}; | ||
558 | execvp(args[0], args); | 554 | execvp(args[0], args); |
555 | exit(EXIT_FAILURE); | ||
559 | } | 556 | } |
560 | 557 | ||
561 | void | 558 | void |
@@ -1855,12 +1852,15 @@ main(int argc, char *argv[]) { | |||
1855 | if(++i < argc) opt_class = argv[i]; | 1852 | if(++i < argc) opt_class = argv[i]; |
1856 | break; | 1853 | break; |
1857 | case 'e': | 1854 | case 'e': |
1858 | if(++i < argc) opt_cmd = argv[i]; | 1855 | if(++i < argc) opt_cmd = &argv[i]; |
1859 | break; | 1856 | break; |
1860 | case 'v': | 1857 | case 'v': |
1861 | default: | 1858 | default: |
1862 | die(USAGE); | 1859 | die(USAGE); |
1863 | } | 1860 | } |
1861 | /* -e eats every remaining arguments */ | ||
1862 | if(opt_cmd) | ||
1863 | break; | ||
1864 | } | 1864 | } |
1865 | setlocale(LC_CTYPE, ""); | 1865 | setlocale(LC_CTYPE, ""); |
1866 | tnew(80, 24); | 1866 | tnew(80, 24); |