diff options
| author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-11-30 22:55:44 +0100 | 
|---|---|---|
| committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-11-30 22:55:44 +0100 | 
| commit | 86c5cb6de6644aeea3c480f66bdeb5e685aab86f (patch) | |
| tree | c2e0b837ea9437f8ac9c2f5a5e0aeaf4b6ae3a7f | |
| parent | 732b9601ed2543b1fa6acbc08ddc05818279265f (diff) | |
change -e behaviour and update man page.
| -rw-r--r-- | st.1 | 25 | ||||
| -rw-r--r-- | st.c | 16 | 
2 files changed, 24 insertions, 17 deletions
| @@ -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. + @@ -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; @@ -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  @@ -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); | 
