tchange -e behaviour and update man page. - st - [fork] customized build of st,… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 86c5cb6de6644aeea3c480f66bdeb5e685aab86f | |
parent 732b9601ed2543b1fa6acbc08ddc05818279265f | |
Author: Aurélien Aptel <[email protected]> | |
Date: Tue, 30 Nov 2010 22:55:44 +0100 | |
change -e behaviour and update man page. | |
Diffstat: | |
M st.1 | 25 ++++++++++++++++--------- | |
M st.c | 16 ++++++++-------- | |
2 files changed, 24 insertions(+), 17 deletions(-) | |
--- | |
diff --git a/st.1 b/st.1 | |
t@@ -3,23 +3,30 @@ | |
st \- simple terminal | |
.SH SYNOPSIS | |
.B st | |
-.RB [ \-e " <cmd>"] | |
-.RB [ \-c " <class>"] | |
-.RB [ \-t " <title>"] | |
+.RB [ \-c | |
+.IR class ] | |
+.RB [ \-t | |
+.IR title ] | |
.RB [ \-v ] | |
+.RB [ \-e | |
+.IR cmd ] | |
.SH DESCRIPTION | |
.B st | |
is a simple terminal emulator. | |
.SH OPTIONS | |
.TP | |
-.B \-e <cmd> | |
-Execute cmd instead of the shell | |
-.TP | |
-.B \-t <title> | |
+.B \-t title | |
Overrides the default title (st) | |
.TP | |
-.B \-c <class> | |
+.B \-c class | |
Overrides the default class ($TERM) | |
.TP | |
-.BI \-v | |
+.B \-v | |
Prints version information to standard output, then exits. | |
+.TP | |
+.B \-e cmd [arguments] | |
+Execute cmd instead of the shell. Type your command as you would on your | |
+shell. If this option is used, it | |
+.BI "must be the last" | |
+on the command-line. This is the same behaviour as xterm/rxvt. | |
+ | |
diff --git a/st.c b/st.c | |
t@@ -247,7 +247,7 @@ static CSIEscape escseq; | |
static int cmdfd; | |
static pid_t pid; | |
static Selection sel; | |
-static char *opt_cmd = NULL; | |
+static char **opt_cmd = NULL; | |
static char *opt_title = NULL; | |
static char *opt_class = NULL; | |
t@@ -547,15 +547,12 @@ void | |
execsh(void) { | |
char **args; | |
char *envshell = getenv("SHELL"); | |
- DEFAULT(envshell, "sh"); | |
- if(opt_cmd) | |
- args = (char*[]){"sh", "-c", opt_cmd, NULL}; | |
- else | |
- args = (char*[]){envshell, "-i", NULL}; | |
- | |
+ DEFAULT(envshell, "sh"); | |
putenv("TERM="TNAME); | |
+ args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL}; | |
execvp(args[0], args); | |
+ exit(EXIT_FAILURE); | |
} | |
void | |
t@@ -1855,12 +1852,15 @@ main(int argc, char *argv[]) { | |
if(++i < argc) opt_class = argv[i]; | |
break; | |
case 'e': | |
- if(++i < argc) opt_cmd = argv[i]; | |
+ if(++i < argc) opt_cmd = &argv[i]; | |
break; | |
case 'v': | |
default: | |
die(USAGE); | |
} | |
+ /* -e eats every remaining arguments */ | |
+ if(opt_cmd) | |
+ break; | |
} | |
setlocale(LC_CTYPE, ""); | |
tnew(80, 24); |