-/* $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 <nicholas.marriott@gmail.com>
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 *,
/* 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);
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)
/* 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);
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);
}
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)
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;
/* 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)
/* 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;
/* 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;
}