From 8867951144e48fa3b39fb420ecd6c7b184e387db Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 21 Apr 2017 21:02:26 +0000 Subject: [PATCH 1/3] Rename a variable. --- cmd-select-pane.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 6ef83473..7fc5d6ee 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -63,24 +63,24 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) const char *style; if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) { - if (wl->window->last == NULL) { + lastwp = w->last; + if (lastwp == NULL) { cmdq_error(item, "no last pane"); return (CMD_RETURN_ERROR); } if (args_has(self->args, 'e')) - w->last->flags &= ~PANE_INPUTOFF; + lastwp->flags &= ~PANE_INPUTOFF; else if (args_has(self->args, 'd')) - w->last->flags |= PANE_INPUTOFF; + lastwp->flags |= PANE_INPUTOFF; else { server_unzoom_window(w); - window_redraw_active_switch(w, w->last); - if (window_set_active_pane(w, w->last)) { + window_redraw_active_switch(w, lastwp); + if (window_set_active_pane(w, lastwp)) { server_status_window(w); server_redraw_window_borders(w); } } - return (CMD_RETURN_NORMAL); } From 194a121ef68d5af557e3e158d1aa6a8f013cd2ac Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 21 Apr 2017 22:00:06 +0000 Subject: [PATCH 2/3] Make sure cmd_find_from_* clear the state if they fail. --- cmd-find.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index 098405aa..edd43a8b 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -749,8 +749,10 @@ cmd_find_from_session_window(struct cmd_find_state *fs, struct session *s, fs->s = s; fs->w = w; - if (cmd_find_best_winlink_with_window(fs) != 0) + if (cmd_find_best_winlink_with_window(fs) != 0) { + cmd_find_clear_state(fs, 0); return (-1); + } fs->wp = fs->w->active; cmd_find_log_state(__func__, fs); @@ -764,10 +766,14 @@ cmd_find_from_window(struct cmd_find_state *fs, struct window *w) cmd_find_clear_state(fs, 0); fs->w = w; - if (cmd_find_best_session_with_window(fs) != 0) + if (cmd_find_best_session_with_window(fs) != 0) { + cmd_find_clear_state(fs, 0); return (-1); - if (cmd_find_best_winlink_with_window(fs) != 0) + } + if (cmd_find_best_winlink_with_window(fs) != 0) { + cmd_find_clear_state(fs, 0); return (-1); + } fs->wp = fs->w->active; cmd_find_log_state(__func__, fs); @@ -796,8 +802,10 @@ cmd_find_from_pane(struct cmd_find_state *fs, struct window_pane *wp) { if (cmd_find_from_window(fs, wp->window) != 0) return (-1); - if (window_pane_outside(wp)) + if (window_pane_outside(wp)) { + cmd_find_clear_state(fs, 0); return (-1); + } fs->wp = wp; cmd_find_log_state(__func__, fs); @@ -811,8 +819,10 @@ cmd_find_from_nothing(struct cmd_find_state *fs) cmd_find_clear_state(fs, 0); fs->s = cmd_find_best_session(NULL, 0, fs->flags); - if (fs->s == NULL) + if (fs->s == NULL) { + cmd_find_clear_state(fs, 0); return (-1); + } fs->wl = fs->s->curw; fs->idx = fs->wl->idx; fs->w = fs->wl->window; @@ -832,8 +842,10 @@ cmd_find_from_mouse(struct cmd_find_state *fs, struct mouse_event *m) return (-1); fs->wp = cmd_mouse_pane(m, &fs->s, &fs->wl); - if (fs->wp == NULL) + if (fs->wp == NULL) { + cmd_find_clear_state(fs, 0); return (-1); + } fs->w = fs->wl->window; cmd_find_log_state(__func__, fs); @@ -902,6 +914,7 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c) */ goto unknown_pane; } + cmd_find_clear_state(fs, 0); return (-1); } fs->wl = fs->s->curw; @@ -1083,8 +1096,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, if (pane != NULL) pane = cmd_find_map_table(cmd_find_pane_table, pane); - log_debug("target %s (flags %#x): session=%s, window=%s, pane=%s", - target, flags, session == NULL ? "none" : session, + log_debug("%s: target %s (flags %#x): session=%s, window=%s, pane=%s", + __func__, target, flags, session == NULL ? "none" : session, window == NULL ? "none" : window, pane == NULL ? "none" : pane); /* No pane is allowed if want an index. */ From c8ecbf38ab09d00920e97bd9363e16a1ebed0fa7 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 21 Apr 2017 22:23:24 +0000 Subject: [PATCH 3/3] Log error properly when no current state, and some other minor tweaks. --- cmd-find.c | 5 ++--- cmd-queue.c | 6 +++--- server-client.c | 3 --- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/cmd-find.c b/cmd-find.c index edd43a8b..44f50bf7 100644 --- a/cmd-find.c +++ b/cmd-find.c @@ -974,9 +974,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmdq_item *item, fs->current = ¤t; log_debug("%s: current is from client", __func__); } else - return (-1); - if (!cmd_find_empty_state(fs->current) && - !cmd_find_valid_state(fs->current)) + goto error; + if (!cmd_find_valid_state(fs->current)) fatalx("invalid current find state"); /* An empty or NULL target is the current. */ diff --git a/cmd-queue.c b/cmd-queue.c index a7a29b58..99ec6055 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -203,14 +203,14 @@ cmdq_fire_command(struct cmdq_item *item) flags = !!(cmd->flags & CMD_CONTROL); cmdq_guard(item, "begin", flags); + if (item->client == NULL) + item->client = cmd_find_client(item, NULL, 1); + if (cmd_prepare_state(cmd, item) != 0) { retval = CMD_RETURN_ERROR; goto out; } - if (item->client == NULL) - item->client = cmd_find_client(item, NULL, 1); - retval = cmd->entry->exec(cmd, item); if (retval == CMD_RETURN_ERROR) goto out; diff --git a/server-client.c b/server-client.c index 63f9e5bf..875f7ef7 100644 --- a/server-client.c +++ b/server-client.c @@ -950,9 +950,6 @@ retry: if (KEYC_IS_MOUSE(key) && m->valid && wp != NULL) { cmd_find_from_winlink_pane(&fs, s->curw, wp); cmd_find_log_state(__func__, &fs); - - if (!cmd_find_valid_state(&fs)) - fatalx("invalid key state"); key_bindings_dispatch(bd, c, m, &fs); } else key_bindings_dispatch(bd, c, m, NULL);