From 3f6bfbaf2babcc7f08f628a82ff31b0b52014e58 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 12 Mar 2019 11:16:49 +0000 Subject: Allow multiple modes to be open in a pane. A stack of open modes is kept and the previous restored when the top is exited. If a mode that is already on the stack is entered, the existing instance is moved to the top as the active mode rather than being opened new. --- cmd-queue.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'cmd-queue.c') diff --git a/cmd-queue.c b/cmd-queue.c index 2a95a3e5..97b3c1c9 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -404,10 +404,11 @@ cmdq_guard(struct cmdq_item *item, const char *guard, int flags) void cmdq_print(struct cmdq_item *item, const char *fmt, ...) { - struct client *c = item->client; - struct window_pane *wp; - va_list ap; - char *tmp, *msg; + struct client *c = item->client; + struct window_pane *wp; + struct window_mode_entry *wme; + va_list ap; + char *tmp, *msg; va_start(ap, fmt); @@ -426,10 +427,9 @@ cmdq_print(struct cmdq_item *item, const char *fmt, ...) server_client_push_stdout(c); } else { wp = c->session->curw->window->active; - if (wp->mode == NULL || wp->mode->mode != &window_view_mode) { - window_pane_reset_mode(wp); + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->mode != &window_view_mode) window_pane_set_mode(wp, &window_view_mode, NULL, NULL); - } window_copy_vadd(wp, fmt, ap); } -- cgit