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.
This commit is contained in:
Nicholas Marriott 2012-09-03 08:48:57 +00:00 committed by Thomas Adam
parent d6066552ee
commit f536dc47c4
2 changed files with 9 additions and 1 deletions

View File

@ -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");

View File

@ -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);
}