The flag decides if select-pane should "wrap around" when it encounters the window edge.
Signed-off-by: Patrick Börjesson <patrick.borjes...@gmail.com> Reviewed-and-Tested-by: Anders Roxell <anders.rox...@linaro.org> --- cmd-select-pane.c | 22 +++++++++++++--------- options-table.c | 5 +++++ window.c | 8 ++++---- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index c342fef..0d57176 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -66,7 +66,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; struct winlink *wl; - struct window_pane *wp; + struct window_pane *wp, *next_wp = NULL; if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) { wl = cmd_find_window(cmdq, args_get(args, 't'), NULL); @@ -96,17 +96,21 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq) } if (args_has(self->args, 'L')) - wp = window_pane_find_left(wp); + next_wp = window_pane_find_left(wp); else if (args_has(self->args, 'R')) - wp = window_pane_find_right(wp); + next_wp = window_pane_find_right(wp); else if (args_has(self->args, 'U')) - wp = window_pane_find_up(wp); + next_wp = window_pane_find_up(wp); else if (args_has(self->args, 'D')) - wp = window_pane_find_down(wp); - if (wp == NULL) { - cmdq_error(cmdq, "pane not found"); - return (CMD_RETURN_ERROR); - } + next_wp = window_pane_find_down(wp); + + if (next_wp == NULL) { + if (options_get_number(&wl->window->options, "wrap-panes")) { + cmdq_error(cmdq, "pane not found"); + return (CMD_RETURN_ERROR); + } + } else + wp = next_wp; window_set_active_pane(wl->window, wp); server_status_window(wl->window); diff --git a/options-table.c b/options-table.c index 8d680b3..a124bb4 100644 --- a/options-table.c +++ b/options-table.c @@ -510,6 +510,11 @@ const struct options_table_entry window_options_table[] = { .default_num = 0 }, + { .name = "wrap-panes", + .type = OPTIONS_TABLE_FLAG, + .default_num = 1 + }, + { .name = "allow-rename", .type = OPTIONS_TABLE_FLAG, .default_num = 1 diff --git a/window.c b/window.c index e9ec7ea..e992a09 100644 --- a/window.c +++ b/window.c @@ -1182,7 +1182,7 @@ window_pane_find_up(struct window_pane *wp) ARRAY_INIT(&list); edge = wp->yoff; - if (edge == 0) + if (edge == 0 && options_get_number(&wp->window->options, "wrap-panes")) edge = wp->window->sy + 1; left = wp->xoff; @@ -1225,7 +1225,7 @@ window_pane_find_down(struct window_pane *wp) ARRAY_INIT(&list); edge = wp->yoff + wp->sy + 1; - if (edge >= wp->window->sy) + if (edge >= wp->window->sy && options_get_number(&wp->window->options, "wrap-panes")) edge = 0; left = wp->xoff; @@ -1268,7 +1268,7 @@ window_pane_find_left(struct window_pane *wp) ARRAY_INIT(&list); edge = wp->xoff; - if (edge == 0) + if (edge == 0 && options_get_number(&wp->window->options, "wrap-panes")) edge = wp->window->sx + 1; top = wp->yoff; @@ -1311,7 +1311,7 @@ window_pane_find_right(struct window_pane *wp) ARRAY_INIT(&list); edge = wp->xoff + wp->sx + 1; - if (edge >= wp->window->sx) + if (edge >= wp->window->sx && options_get_number(&wp->window->options, "wrap-panes")) edge = 0; top = wp->yoff; -- Patrick Börjesson ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users