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

Reply via email to