summaryrefslogtreecommitdiffstats
path: root/cmd-find.c
diff options
context:
space:
mode:
authornicm <nicm>2020-05-16 16:20:59 +0000
committernicm <nicm>2020-05-16 16:20:59 +0000
commit303d342d5fa5903983c08e4cae429e4f9480eea3 (patch)
tree150aab174cb176f9a0f8fe29e5b1eb46a65457ec /cmd-find.c
parentc914abfa19938fe0e41941879649b7a40e192082 (diff)
Add a client flag 'active-pane' which stores the active pane in the
client and allows it to be changed independently from the real active pane stored in the window. This is can be used with session groups which allow an independent current window (although it would be nice to have a flag for this too and remove session groups). The client active pane is only really useful interactively, many things (hooks, window-style, zooming) still use the window active pane.
Diffstat (limited to 'cmd-find.c')
-rw-r--r--cmd-find.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/cmd-find.c b/cmd-find.c
index 9c8bcbc1..9f04c4a8 100644
--- a/cmd-find.c
+++ b/cmd-find.c
@@ -588,22 +588,22 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
return (-1);
return (0);
} else if (strcmp(pane, "{up-of}") == 0) {
- fs->wp = window_pane_find_up(fs->w->active);
+ fs->wp = window_pane_find_up(fs->current->wp);
if (fs->wp == NULL)
return (-1);
return (0);
} else if (strcmp(pane, "{down-of}") == 0) {
- fs->wp = window_pane_find_down(fs->w->active);
+ fs->wp = window_pane_find_down(fs->current->wp);
if (fs->wp == NULL)
return (-1);
return (0);
} else if (strcmp(pane, "{left-of}") == 0) {
- fs->wp = window_pane_find_left(fs->w->active);
+ fs->wp = window_pane_find_left(fs->current->wp);
if (fs->wp == NULL)
return (-1);
return (0);
} else if (strcmp(pane, "{right-of}") == 0) {
- fs->wp = window_pane_find_right(fs->w->active);
+ fs->wp = window_pane_find_right(fs->current->wp);
if (fs->wp == NULL)
return (-1);
return (0);
@@ -615,7 +615,7 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
n = strtonum(pane + 1, 1, INT_MAX, NULL);
else
n = 1;
- wp = fs->w->active;
+ wp = fs->current->wp;
if (pane[0] == '+')
fs->wp = window_pane_next_by_number(fs->w, wp, n);
else
@@ -867,7 +867,18 @@ cmd_find_from_client(struct cmd_find_state *fs, struct client *c, int flags)
/* If this is an attached client, all done. */
if (c->session != NULL) {
- cmd_find_from_session(fs, c->session, flags);
+ cmd_find_clear_state(fs, flags);
+
+ fs->wp = server_client_get_pane(c);
+ if (fs->wp == NULL) {
+ cmd_find_from_session(fs, c->session, flags);
+ return (0);
+ }
+ fs->s = c->session;
+ fs->wl = fs->s->curw;
+ fs->w = fs->wl->window;
+
+ cmd_find_log_state(__func__, fs);
return (0);
}
cmd_find_clear_state(fs, flags);