copy mode uses the real screen as backing and if it is updated while copying,

strange things can happen. So, freeze reading from the pty while in copy mode.
This commit is contained in:
Nicholas Marriott 2010-02-19 00:03:21 +00:00
parent a61b8a2033
commit 3a89d1ef7f
3 changed files with 10 additions and 1 deletions

View File

@ -69,7 +69,9 @@ server_window_loop(void)
continue;
TAILQ_FOREACH(wp, &w->panes, entry) {
if (wp->fd != -1) {
if (wp->fd == -1)
continue;
if (!(wp->flags & PANE_FREEZE)) {
if (server_window_backoff(wp))
bufferevent_disable(wp->event, EV_READ);
else

1
tmux.h
View File

@ -787,6 +787,7 @@ struct window_pane {
int flags;
#define PANE_REDRAW 0x1
#define PANE_FREEZE 0x2
char *cmd;
char *shell;

View File

@ -138,6 +138,9 @@ window_copy_init(struct window_pane *wp)
data->searchtype = WINDOW_COPY_OFF;
data->searchstr = NULL;
wp->flags |= PANE_FREEZE;
bufferevent_disable(wp->event, EV_READ|EV_WRITE);
s = &data->screen;
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
if (options_get_number(&wp->window->options, "mode-mouse"))
@ -166,6 +169,9 @@ window_copy_free(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
wp->flags &= ~PANE_FREEZE;
bufferevent_enable(wp->event, EV_READ|EV_WRITE);
if (data->searchstr != NULL)
xfree(data->searchstr);
xfree(data->inputstr);