diff options
author | 2009-12-08 07:49:31 +0000 | |
---|---|---|
committer | 2009-12-08 07:49:31 +0000 | |
commit | 36e11aedb31b1259a0dc5fe7ba5d0a47e13c03bd (patch) | |
tree | 6bcea7274d8288dd6f83f3eff52eb19cc4455e2b /usr.bin/tmux/cmd.c | |
parent | sync (diff) | |
download | wireguard-openbsd-36e11aedb31b1259a0dc5fe7ba5d0a47e13c03bd.tar.xz wireguard-openbsd-36e11aedb31b1259a0dc5fe7ba5d0a47e13c03bd.zip |
Permit panes to be referred to as "top", "bottom", "top-left" etc, if the right
pane can be identified.
Diffstat (limited to 'usr.bin/tmux/cmd.c')
-rw-r--r-- | usr.bin/tmux/cmd.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/usr.bin/tmux/cmd.c b/usr.bin/tmux/cmd.c index ec9a405f1c6..007ae1f3c30 100644 --- a/usr.bin/tmux/cmd.c +++ b/usr.bin/tmux/cmd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd.c,v 1.35 2009/12/03 22:50:10 nicm Exp $ */ +/* $OpenBSD: cmd.c,v 1.36 2009/12/08 07:49:31 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -856,12 +856,12 @@ struct winlink * cmd_find_pane(struct cmd_ctx *ctx, const char *arg, struct session **sp, struct window_pane **wpp) { - struct session *s; - struct winlink *wl; - const char *period; - char *winptr, *paneptr; - const char *errstr; - u_int idx; + struct session *s; + struct winlink *wl; + struct layout_cell *lc; + const char *period, *errstr; + char *winptr, *paneptr; + u_int idx; /* Get the current session. */ if ((s = cmd_current_session(ctx)) == NULL) { @@ -895,20 +895,27 @@ cmd_find_pane(struct cmd_ctx *ctx, *wpp = wl->window->active; else { idx = strtonum(paneptr, 0, INT_MAX, &errstr); - if (errstr != NULL) { - ctx->error(ctx, "pane %s: %s", errstr, paneptr); - goto error; - } + if (errstr != NULL) + goto lookup_string; *wpp = window_pane_at_index(wl->window, idx); - if (*wpp == NULL) { - ctx->error(ctx, "no such pane: %u", idx); - goto error; - } + if (*wpp == NULL) + goto lookup_string; } xfree(winptr); return (wl); +lookup_string: + /* Try pane string description. */ + if ((lc = layout_find_string(s->curw->window, paneptr)) == NULL) { + ctx->error(ctx, "can't find pane: %s", paneptr); + goto error; + } + *wpp = lc->wp; + + xfree(winptr); + return (s->curw); + no_period: /* Try as a pane number alone. */ idx = strtonum(arg, 0, INT_MAX, &errstr); @@ -922,6 +929,12 @@ no_period: return (s->curw); lookup_window: + /* Try pane string description. */ + if ((lc = layout_find_string(s->curw->window, arg)) != NULL) { + *wpp = lc->wp; + return (s->curw); + } + /* Try as a window and use the active pane. */ if ((wl = cmd_find_window(ctx, arg, sp)) != NULL) *wpp = wl->window->active; |