From f536dc47c46ded3eb06491e637f9a67e8f3affa1 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 3 Sep 2012 08:48:57 +0000 Subject: [PATCH] If stdin in the client is enable immediately, tmux will eat anything sent to stdin before it is needed, which can be inconvenient (eg pasting commands). Instead, start with stdin disabled and reuse MSG_STDIN from server->client to mean that stdin should be enabled. Based on a diff from Chris Johnsen. --- client.c | 7 ++++++- server-fn.c | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/client.c b/client.c index 9ba086de..ae4f5066 100644 --- a/client.c +++ b/client.c @@ -285,7 +285,6 @@ client_main(int argc, char **argv, int flags) /* Set the event and dispatch. */ client_update_event(); - event_add (&client_stdin, NULL); event_dispatch(); /* Print the exit message, if any, and exit. */ @@ -520,6 +519,12 @@ client_dispatch_wait(void *data) event_del(&client_stdin); client_attached = 1; break; + case MSG_STDIN: + if (datalen != 0) + fatalx("bad MSG_STDIN size"); + + event_add(&client_stdin, NULL); + break; case MSG_STDOUT: if (datalen != sizeof stdoutdata) fatalx("bad MSG_STDOUT"); diff --git a/server-fn.c b/server-fn.c index aea0fafe..b21d94a1 100644 --- a/server-fn.c +++ b/server-fn.c @@ -581,5 +581,8 @@ server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, if (c->stdin_closed) c->stdin_callback (c, 1, c->stdin_callback_data); + + server_write_client(c, MSG_STDIN, NULL, 0); + return (0); }