mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
Merge branch 'obsd-master'
This commit is contained in:
20
client.c
20
client.c
@ -50,6 +50,8 @@ static enum {
|
||||
static int client_exitval;
|
||||
static enum msgtype client_exittype;
|
||||
static const char *client_exitsession;
|
||||
static const char *client_execshell;
|
||||
static const char *client_execcmd;
|
||||
static int client_attached;
|
||||
|
||||
static __dead void client_exec(const char *,const char *);
|
||||
@ -361,6 +363,14 @@ client_main(struct event_base *base, int argc, char **argv, int flags,
|
||||
/* Start main loop. */
|
||||
proc_loop(client_proc, NULL);
|
||||
|
||||
/* Run command if user requested exec, instead of exiting. */
|
||||
if (client_exittype == MSG_EXEC) {
|
||||
if (client_flags & CLIENT_CONTROLCONTROL)
|
||||
tcsetattr(STDOUT_FILENO, TCSAFLUSH, &saved_tio);
|
||||
clear_signals(0);
|
||||
client_exec(client_execshell, client_execcmd);
|
||||
}
|
||||
|
||||
/* Print the exit message, if any, and exit. */
|
||||
if (client_attached) {
|
||||
if (client_exitreason != CLIENT_EXIT_NONE)
|
||||
@ -660,6 +670,16 @@ client_dispatch_attached(struct imsg *imsg)
|
||||
client_exitreason = CLIENT_EXIT_DETACHED;
|
||||
proc_send(client_peer, MSG_EXITING, -1, NULL, 0);
|
||||
break;
|
||||
case MSG_EXEC:
|
||||
if (datalen == 0 || data[datalen - 1] != '\0' ||
|
||||
strlen(data) + 1 == (size_t)datalen)
|
||||
fatalx("bad MSG_EXEC string");
|
||||
client_execcmd = xstrdup(data);
|
||||
client_execshell = xstrdup(data + strlen(data) + 1);
|
||||
|
||||
client_exittype = imsg->hdr.type;
|
||||
proc_send(client_peer, MSG_EXITING, -1, NULL, 0);
|
||||
break;
|
||||
case MSG_EXIT:
|
||||
if (datalen != 0 && datalen != sizeof (int))
|
||||
fatalx("bad MSG_EXIT size");
|
||||
|
Reference in New Issue
Block a user