Update of /cvsroot/tmux/tmux
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv1295

Modified Files:
        cmd-select-layout.c key-bindings.c layout-set.c tmux.1 
Log Message:
Sync OpenBSD patchset 688:

Add a tiled layout, originally from Liam Bedford a while ago, fixed up
by me.


Index: cmd-select-layout.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-select-layout.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- cmd-select-layout.c 4 Dec 2009 22:14:47 -0000       1.10
+++ cmd-select-layout.c 14 May 2010 14:16:37 -0000      1.11
@@ -59,6 +59,9 @@
        case ('4' | KEYC_ESCAPE):
                data->arg = xstrdup("main-vertical");
                break;
+       case ('5' | KEYC_ESCAPE):
+               data->arg = xstrdup("tiled");
+               break;
        }
 }
 

Index: key-bindings.c
===================================================================
RCS file: /cvsroot/tmux/tmux/key-bindings.c,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -d -r1.90 -r1.91
--- key-bindings.c      5 Apr 2010 05:11:43 -0000       1.90
+++ key-bindings.c      14 May 2010 14:16:37 -0000      1.91
@@ -151,6 +151,7 @@
                { '2' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
                { '3' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
                { '4' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
+               { '5' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
                { KEYC_PPAGE,             0, &cmd_copy_mode_entry },
                { 'n' | KEYC_ESCAPE,      0, &cmd_next_window_entry },
                { 'o' | KEYC_ESCAPE,      0, &cmd_rotate_window_entry },

Index: layout-set.c
===================================================================
RCS file: /cvsroot/tmux/tmux/layout-set.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- layout-set.c        5 Feb 2010 01:29:04 -0000       1.5
+++ layout-set.c        14 May 2010 14:16:37 -0000      1.6
@@ -31,6 +31,7 @@
 void   layout_set_even_v(struct window *);
 void   layout_set_main_h(struct window *);
 void   layout_set_main_v(struct window *);
+void   layout_set_tiled(struct window *);
 
 const struct {
        const char      *name;
@@ -40,6 +41,7 @@
        { "even-vertical", layout_set_even_v },
        { "main-horizontal", layout_set_main_h },
        { "main-vertical", layout_set_main_v },
+       { "tiled", layout_set_tiled },
 };
 
 const char *
@@ -447,3 +449,102 @@
 
        server_redraw_window(w);
 }
+
+void
+layout_set_tiled(struct window *w)
+{
+       struct window_pane      *wp;
+       struct layout_cell      *lc, *lcrow, *lcchild;
+       u_int                    n, width, height, used;
+       u_int                    i, j, columns, rows;
+
+       layout_print_cell(w->layout_root, __func__, 1);
+
+       /* Get number of panes. */
+       n = window_count_panes(w);
+       if (n <= 1)
+               return;
+
+       /* How many rows and columns are wanted? */
+       rows = columns = 1;
+       while (rows * columns < n) {
+               rows++;
+               if (rows * columns < n)
+                       columns++;
+       }
+
+       /* What width and height should they be? */
+       width = w->sx / columns;
+       if (width < PANE_MINIMUM + 1)
+               width = PANE_MINIMUM + 1;
+       height = w->sy / rows;
+       if (width < PANE_MINIMUM + 1)
+               width = PANE_MINIMUM + 1;
+
+       /* Free old tree and create a new root. */
+       layout_free(w);
+       lc = w->layout_root = layout_create_cell(NULL);
+       layout_set_size(lc, width * columns, height * rows, 0, 0);
+       layout_make_node(lc, LAYOUT_TOPBOTTOM);
+
+       /* Create a grid of the cells. */
+       wp = TAILQ_FIRST(&w->panes);
+       for (j = 0; j < rows; j++) {
+               /* If this is the last cell, all done. */
+               if (wp == NULL)
+                       break;
+
+               /* Create the new row. */
+               lcrow = layout_create_cell(lc);
+               layout_set_size(lcrow, w->sx, height - 1, 0, 0);
+               TAILQ_INSERT_TAIL(&lc->cells, lcrow, entry);
+
+               /* If only one column, just use the row directly. */
+               if (n - (j * columns) == 1) {
+                       layout_make_leaf(lcrow, wp);
+                       wp = TAILQ_NEXT(wp, entry);
+                       continue;
+               }
+
+               /* Add in the columns. */
+               layout_make_node(lcrow, LAYOUT_LEFTRIGHT);
+               for (i = 0; i < columns; i++) {
+                       /* Create and add a pane cell. */
+                       lcchild = layout_create_cell(lcrow);
+                       layout_set_size(lcchild, width - 1, height - 1, 0, 0);
+                       layout_make_leaf(lcchild, wp);
+                       TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry);
+
+                       /* Move to the next cell. */
+                       if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
+                               break;
+               }
+
+               /*
+                * Adjust the row and columns to fit the full width if
+                * necessary.
+                */
+               if (i == columns)
+                       i--;
+               used = ((i + 1) * width) - 1;
+               if (w->sx <= used)
+                       continue;
+               lcchild = TAILQ_LAST(&lcrow->cells, layout_cells);
+               layout_resize_adjust(lcchild, LAYOUT_LEFTRIGHT, w->sx - used);
+       }
+
+       /* Adjust the last row height to fit if necessary. */
+       used = (rows * height) - 1;
+       if (w->sy > used) {
+               lcrow = TAILQ_LAST(&lc->cells, layout_cells);
+               layout_resize_adjust(lcrow, LAYOUT_TOPBOTTOM, w->sy - used);
+       }
+
+       /* Fix cell offsets. */
+       layout_fix_offsets(lc);
+       layout_fix_panes(w, w->sx, w->sy);
+
+       layout_print_cell(w->layout_root, __func__, 1);
+
+       server_redraw_window(w);
+}

Index: tmux.1
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.1,v
retrieving revision 1.246
retrieving revision 1.247
diff -u -d -r1.246 -r1.247
--- tmux.1      6 Apr 2010 22:02:03 -0000       1.246
+++ tmux.1      14 May 2010 14:16:37 -0000      1.247
@@ -14,7 +14,7 @@
 .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: April 6 2010 $
+.Dd $Mdocdate: April 25 2010 $
 .Dt TMUX 1
 .Os
 .Sh NAME
@@ -784,6 +784,9 @@
 See the
 .Em main-pane-width
 window option.
+.It Ic tiled
+Panes are spread out as evenly as possible over the window in both rows and
+columns.
 .El
 .Pp
 Commands related to windows and panes are as follows:


------------------------------------------------------------------------------

_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to