diff options
Diffstat (limited to 'st.c')
| -rw-r--r-- | st.c | 29 | 
1 files changed, 17 insertions, 12 deletions
@@ -136,8 +136,7 @@ typedef struct {  	int narg;              /* nb of args */  } STREscape; - -static void execsh(char **); +static void execsh(char *, char **);  static void stty(char **);  static void sigchld(int);  static void ttywriteraw(const char *, size_t); @@ -201,15 +200,13 @@ static char *base64dec(const char *);  static ssize_t xwrite(int, const char *, size_t);  /* Globals */ -int cmdfd; -pid_t pid; -int oldbutton   = 3; /* button event on startup: 3 = release */ -  static Term term;  static Selection sel;  static CSIEscape csiescseq;  static STREscape strescseq;  static int iofd = 1; +static int cmdfd; +static pid_t pid;  static uchar utfbyte[UTF_SIZ + 1] = {0x80,    0, 0xC0, 0xE0, 0xF0};  static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; @@ -659,7 +656,7 @@ die(const char *errstr, ...)  }  void -execsh(char **args) +execsh(char *cmd, char **args)  {  	char *sh, *prog;  	const struct passwd *pw; @@ -673,7 +670,7 @@ execsh(char **args)  	}  	if ((sh = getenv("SHELL")) == NULL) -		sh = (pw->pw_shell[0]) ? pw->pw_shell : shell; +		sh = (pw->pw_shell[0]) ? pw->pw_shell : cmd;  	if (args)  		prog = args[0]; @@ -745,8 +742,8 @@ stty(char **args)  	    perror("Couldn't call stty");  } -void -ttynew(char *line, char *out, char **args) +int +ttynew(char *line, char *cmd, char *out, char **args)  {  	int m, s; @@ -765,7 +762,7 @@ ttynew(char *line, char *out, char **args)  			die("open line failed: %s\n", strerror(errno));  		dup2(cmdfd, 0);  		stty(args); -		return; +		return cmdfd;  	}  	/* seems to work fine on linux, openbsd and freebsd */ @@ -786,7 +783,7 @@ ttynew(char *line, char *out, char **args)  			die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));  		close(s);  		close(m); -		execsh(args); +		execsh(cmd, args);  		break;  	default:  		close(s); @@ -794,6 +791,7 @@ ttynew(char *line, char *out, char **args)  		signal(SIGCHLD, sigchld);  		break;  	} +	return cmdfd;  }  size_t @@ -916,6 +914,13 @@ ttyresize(int tw, int th)  		fprintf(stderr, "Couldn't set window size: %s\n", strerror(errno));  } +void +ttyhangup() +{ +	/* Send SIGHUP to shell */ +	kill(pid, SIGHUP); +} +  int  tattrset(int attr)  {  | 
