aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server-window.c4
-rw-r--r--tmux.h1
-rw-r--r--window-copy.c6
3 files changed, 10 insertions, 1 deletions
diff --git a/server-window.c b/server-window.c
index 048077e0..acac83c0 100644
--- a/server-window.c
+++ b/server-window.c
@@ -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
diff --git a/tmux.h b/tmux.h
index 02712651..ac398f04 100644
--- a/tmux.h
+++ b/tmux.h
@@ -787,6 +787,7 @@ struct window_pane {
int flags;
#define PANE_REDRAW 0x1
+#define PANE_FREEZE 0x2
char *cmd;
char *shell;
diff --git a/window-copy.c b/window-copy.c
index 1b2d1ada..b465f21b 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -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);