summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/tmux/cmd.c')
-rw-r--r--usr.bin/tmux/cmd.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/usr.bin/tmux/cmd.c b/usr.bin/tmux/cmd.c
index 37494eb51e5..e53fd6a546c 100644
--- a/usr.bin/tmux/cmd.c
+++ b/usr.bin/tmux/cmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.38 2010/01/19 21:27:47 nicm Exp $ */
+/* $OpenBSD: cmd.c,v 1.39 2010/03/22 19:07:52 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -45,7 +45,6 @@ const struct cmd_entry *cmd_table[] = {
&cmd_detach_client_entry,
&cmd_display_message_entry,
&cmd_display_panes_entry,
- &cmd_down_pane_entry,
&cmd_find_window_entry,
&cmd_has_session_entry,
&cmd_if_shell_entry,
@@ -109,7 +108,6 @@ const struct cmd_entry *cmd_table[] = {
&cmd_switch_client_entry,
&cmd_unbind_key_entry,
&cmd_unlink_window_entry,
- &cmd_up_pane_entry,
NULL
};
@@ -955,15 +953,29 @@ cmd_find_pane(struct cmd_ctx *ctx,
return (wl);
lookup_string:
+ /* Try as next or previous pane. */
+ if (paneptr[0] == '+' && paneptr[1] == '\0') {
+ *wpp = TAILQ_NEXT(wl->window->active, entry);
+ if (*wpp == NULL)
+ *wpp = TAILQ_FIRST(&wl->window->panes);
+ return (wl);
+ }
+ if (paneptr[0] == '-' && paneptr[1] == '\0') {
+ *wpp = TAILQ_PREV(wl->window->active, window_panes, entry);
+ if (*wpp == NULL)
+ *wpp = TAILQ_LAST(&wl->window->panes, window_panes);
+ return (wl);
+ }
+
/* Try pane string description. */
- if ((lc = layout_find_string(s->curw->window, paneptr)) == NULL) {
+ if ((lc = layout_find_string(wl->window, paneptr)) == NULL) {
ctx->error(ctx, "can't find pane: %s", paneptr);
goto error;
}
*wpp = lc->wp;
xfree(winptr);
- return (s->curw);
+ return (wl);
no_period:
/* Try as a pane number alone. */