From e7cd547457e40dce8c05c37c358c414d36bac54d Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 14 Aug 2009 11:23:34 +0000 Subject: [PATCH] Reset attributes as well as scroll region before poll(2) and add a big comment explaining why. --- server.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/server.c b/server.c index eb8843f5..059e1b9d 100644 --- a/server.c +++ b/server.c @@ -879,7 +879,16 @@ server_handle_client(struct client *c) wp = c->session->curw->window->active; /* could die - do each loop */ s = wp->screen; - /* Ensure cursor position and mode settings. */ + /* + * Update cursor position and mode settings. The scroll region and + * attributes are cleared across poll(2) as this is the most likely + * time a user may interrupt tmux, for example with ~^Z in ssh(1). This + * is a compromise between excessive resets and likelihood of an + * interrupt. + * + * tty_region/tty_reset/tty_update_mode already take care of not + * resetting things that are already in their default state. + */ status = options_get_number(&c->session->options, "status"); tty_region(&c->tty, 0, c->tty.sy - 1, 0); if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - status) @@ -891,6 +900,7 @@ server_handle_client(struct client *c) if (server_locked) mode &= ~TTY_NOCURSOR; tty_update_mode(&c->tty, mode); + tty_reset(&c->tty); } /* Lost a client. */