diff options
| -rw-r--r-- | config.def.h | 3 | ||||
| -rw-r--r-- | st.1 | 3 | ||||
| -rw-r--r-- | st.c | 16 | ||||
| -rw-r--r-- | st.h | 1 | 
4 files changed, 15 insertions, 8 deletions
diff --git a/config.def.h b/config.def.h index 546edda..dfcbda9 100644 --- a/config.def.h +++ b/config.def.h @@ -11,13 +11,14 @@ static int borderpx = 2;  /*   * What program is execed by st depends of these precedence rules:   * 1: program passed with -e - * 2: utmp option + * 2: scroll and/or utmp   * 3: SHELL environment variable   * 4: value of shell in /etc/passwd   * 5: value of shell in config.h   */  static char *shell = "/bin/sh";  char *utmp = NULL; +char *scroll = NULL;  char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";  /* identification sequence returned in DA and DECID */ @@ -170,7 +170,8 @@ See the LICENSE file for the terms of redistribution.  .SH SEE ALSO  .BR tabbed (1),  .BR utmp (1), -.BR stty (1) +.BR stty (1), +.BR scroll (1)  .SH BUGS  See the TODO file in the distribution. @@ -664,7 +664,7 @@ die(const char *errstr, ...)  void  execsh(char *cmd, char **args)  { -	char *sh, *prog; +	char *sh, *prog, *arg;  	const struct passwd *pw;  	errno = 0; @@ -678,13 +678,17 @@ execsh(char *cmd, char **args)  	if ((sh = getenv("SHELL")) == NULL)  		sh = (pw->pw_shell[0]) ? pw->pw_shell : cmd; -	if (args) +	if (args) {  		prog = args[0]; -	else if (utmp) -		prog = utmp; -	else +		arg = NULL; +	} else if (scroll || utmp) { +		prog = scroll ? scroll : utmp; +		arg = scroll ? utmp : NULL; +	} else {  		prog = sh; -	DEFAULT(args, ((char *[]) {prog, NULL})); +		arg = NULL; +	} +	DEFAULT(args, ((char *[]) {prog, arg, NULL}));  	unsetenv("COLUMNS");  	unsetenv("LINES"); @@ -113,6 +113,7 @@ char *xstrdup(char *);  /* config.h globals */  extern char *utmp; +extern char *scroll;  extern char *stty_args;  extern char *vtiden;  extern wchar_t *worddelimiters;  | 
