=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-find.c,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- src/usr.bin/tmux/cmd-find.c 2017/04/05 10:49:46 1.43 +++ src/usr.bin/tmux/cmd-find.c 2017/04/05 11:04:48 1.44 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-find.c,v 1.43 2017/04/05 10:49:46 nicm Exp $ */ +/* $OpenBSD: cmd-find.c,v 1.44 2017/04/05 11:04:48 nicm Exp $ */ /* * Copyright (c) 2015 Nicholas Marriott @@ -43,10 +43,10 @@ static const char *cmd_find_map_table(const char *[][2], const char *); static int cmd_find_get_session(struct cmd_find_state *, const char *); -static int cmd_find_get_window(struct cmd_find_state *, const char *); +static int cmd_find_get_window(struct cmd_find_state *, const char *, int); static int cmd_find_get_window_with_session(struct cmd_find_state *, const char *); -static int cmd_find_get_pane(struct cmd_find_state *, const char *); +static int cmd_find_get_pane(struct cmd_find_state *, const char *, int); static int cmd_find_get_pane_with_session(struct cmd_find_state *, const char *); static int cmd_find_get_pane_with_window(struct cmd_find_state *, @@ -464,7 +464,7 @@ /* Find window from string. Fills in s, wl, w. */ static int -cmd_find_get_window(struct cmd_find_state *fs, const char *window) +cmd_find_get_window(struct cmd_find_state *fs, const char *window, int only) { log_debug("%s: %s", __func__, window); @@ -484,7 +484,7 @@ return (0); /* Otherwise try as a session itself. */ - if (cmd_find_get_session(fs, window) == 0) { + if (!only && cmd_find_get_session(fs, window) == 0) { fs->wl = fs->s->curw; fs->w = fs->wl->window; if (~fs->flags & CMD_FIND_WINDOW_INDEX) @@ -651,7 +651,7 @@ /* Find pane from string. Fills in s, wl, w, wp. */ static int -cmd_find_get_pane(struct cmd_find_state *fs, const char *pane) +cmd_find_get_pane(struct cmd_find_state *fs, const char *pane, int only) { log_debug("%s: %s", __func__, pane); @@ -675,7 +675,7 @@ return (0); /* Otherwise try as a window itself (this will also try as session). */ - if (cmd_find_get_window(fs, pane) == 0) { + if (!only && cmd_find_get_window(fs, pane, 0) == 0) { fs->wp = fs->w->active; return (0); } @@ -982,6 +982,7 @@ struct mouse_event *m; char *colon, *period, *copy = NULL; const char *session, *window, *pane; + int window_only = 0, pane_only = 0; /* Log the arguments. */ if (target == NULL) @@ -1066,13 +1067,17 @@ if (colon != NULL && period != NULL) { session = copy; window = colon; + window_only = 1; pane = period; + pane_only = 1; } else if (colon != NULL && period == NULL) { session = copy; window = colon; + window_only = 1; } else if (colon == NULL && period != NULL) { window = copy; pane = period; + pane_only = 1; } else { if (*copy == '$') session = copy; @@ -1179,7 +1184,7 @@ /* No session. If window and pane, try them. */ if (window != NULL && pane != NULL) { /* This will fill in session, winlink and window. */ - if (cmd_find_get_window(fs, window) != 0) + if (cmd_find_get_window(fs, window, window_only) != 0) goto no_window; /* This will fill in pane. */ if (cmd_find_get_pane_with_window(fs, pane) != 0) @@ -1190,7 +1195,7 @@ /* If just window is present, try it. */ if (window != NULL && pane == NULL) { /* This will fill in session, winlink and window. */ - if (cmd_find_get_window(fs, window) != 0) + if (cmd_find_get_window(fs, window, window_only) != 0) goto no_window; fs->wp = fs->wl->window->active; goto found; @@ -1199,7 +1204,7 @@ /* If just pane is present, try it. */ if (window == NULL && pane != NULL) { /* This will fill in session, winlink, window and pane. */ - if (cmd_find_get_pane(fs, pane) != 0) + if (cmd_find_get_pane(fs, pane, pane_only) != 0) goto no_pane; goto found; }