Add other-pane-height and other-pane-width options, allowing the width

or height of the smaller panes in the main-horizontal and main-vertical
layouts to be set. Mostly from David Goodlad.
pull/1/head
Nicholas Marriott 2010-12-19 18:35:08 +00:00
parent 8715247a43
commit c198664d15
4 changed files with 47 additions and 4 deletions

View File

@ -159,6 +159,8 @@ const struct set_option_entry set_window_option_table[] = {
{ "monitor-activity", SET_OPTION_FLAG, 0, 0, NULL }, { "monitor-activity", SET_OPTION_FLAG, 0, 0, NULL },
{ "monitor-content", SET_OPTION_STRING, 0, 0, NULL }, { "monitor-content", SET_OPTION_STRING, 0, 0, NULL },
{ "monitor-silence",SET_OPTION_NUMBER, 0, INT_MAX, NULL}, { "monitor-silence",SET_OPTION_NUMBER, 0, INT_MAX, NULL},
{ "other-pane-height", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
{ "other-pane-width", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
{ "remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL }, { "remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL },
{ "synchronize-panes", SET_OPTION_FLAG, 0, 0, NULL }, { "synchronize-panes", SET_OPTION_FLAG, 0, 0, NULL },
{ "utf8", SET_OPTION_FLAG, 0, 0, NULL }, { "utf8", SET_OPTION_FLAG, 0, 0, NULL },

View File

@ -231,8 +231,8 @@ layout_set_main_h(struct window *w)
{ {
struct window_pane *wp; struct window_pane *wp;
struct layout_cell *lc, *lcmain, *lcrow, *lcchild; struct layout_cell *lc, *lcmain, *lcrow, *lcchild;
u_int n, mainheight, width, height, used; u_int n, mainheight, otherheight, width, height;
u_int i, j, columns, rows, totalrows; u_int used, i, j, columns, rows, totalrows;
layout_print_cell(w->layout_root, __func__, 1); layout_print_cell(w->layout_root, __func__, 1);
@ -252,6 +252,16 @@ layout_set_main_h(struct window *w)
/* Get the main pane height and add one for separator line. */ /* Get the main pane height and add one for separator line. */
mainheight = options_get_number(&w->options, "main-pane-height") + 1; mainheight = options_get_number(&w->options, "main-pane-height") + 1;
/* Get the optional other pane height and add one for separator line. */
otherheight = options_get_number(&w->options, "other-pane-height") + 1;
/*
* If an other pane height was specified, honour it so long as it
* doesn't shrink the main height to less than the main-pane-height
*/
if (otherheight > 1 && w->sx - otherheight > mainheight)
mainheight = w->sx - otherheight;
if (mainheight < PANE_MINIMUM + 1) if (mainheight < PANE_MINIMUM + 1)
mainheight = PANE_MINIMUM + 1; mainheight = PANE_MINIMUM + 1;
@ -342,8 +352,8 @@ layout_set_main_v(struct window *w)
{ {
struct window_pane *wp; struct window_pane *wp;
struct layout_cell *lc, *lcmain, *lccolumn, *lcchild; struct layout_cell *lc, *lcmain, *lccolumn, *lcchild;
u_int n, mainwidth, width, height, used; u_int n, mainwidth, otherwidth, width, height;
u_int i, j, columns, rows, totalcolumns; u_int used, i, j, columns, rows, totalcolumns;
layout_print_cell(w->layout_root, __func__, 1); layout_print_cell(w->layout_root, __func__, 1);
@ -363,6 +373,16 @@ layout_set_main_v(struct window *w)
/* Get the main pane width and add one for separator line. */ /* Get the main pane width and add one for separator line. */
mainwidth = options_get_number(&w->options, "main-pane-width") + 1; mainwidth = options_get_number(&w->options, "main-pane-width") + 1;
/* Get the optional other pane width and add one for separator line. */
otherwidth = options_get_number(&w->options, "other-pane-width") + 1;
/*
* If an other pane width was specified, honour it so long as it
* doesn't shrink the main width to less than the main-pane-width
*/
if (otherwidth > 1 && w->sx - otherwidth > mainwidth)
mainwidth = w->sx - otherwidth;
if (mainwidth < PANE_MINIMUM + 1) if (mainwidth < PANE_MINIMUM + 1)
mainwidth = PANE_MINIMUM + 1; mainwidth = PANE_MINIMUM + 1;

19
tmux.1
View File

@ -2195,6 +2195,25 @@ Windows that have been silent for the interval are highlighted in the
status line. status line.
An interval of zero disables the monitoring. An interval of zero disables the monitoring.
.Pp .Pp
.It Ic other-pane-height Ar height
Set the height of the other panes (not the main pane) in the
.Ic main-horizontal
layout.
If this option is set to 0 (the default), it will have no effect.
If both the
.Ic main-pane-height
and
.Ic other-pane-height
options are set, the main pane will grow taller to make the other panes the
specified height, but will never shrink to do so.
.Pp
.It Ic other-pane-width Ar width
Like
.Ic other-pane-height ,
but set the width of other panes in the
.Ic main-vertical
layout.
.Pp
.It Xo Ic remain-on-exit .It Xo Ic remain-on-exit
.Op Ic on | off .Op Ic on | off
.Xc .Xc

2
tmux.c
View File

@ -404,6 +404,8 @@ main(int argc, char **argv)
options_set_number(wo, "monitor-activity", 0); options_set_number(wo, "monitor-activity", 0);
options_set_string(wo, "monitor-content", "%s", ""); options_set_string(wo, "monitor-content", "%s", "");
options_set_number(wo, "monitor-silence", 0); options_set_number(wo, "monitor-silence", 0);
options_set_number(wo, "other-pane-height", 0);
options_set_number(wo, "other-pane-width", 0);
options_set_number(wo, "window-status-attr", 0); options_set_number(wo, "window-status-attr", 0);
options_set_number(wo, "window-status-bg", 8); options_set_number(wo, "window-status-bg", 8);
options_set_number(wo, "window-status-current-attr", 0); options_set_number(wo, "window-status-current-attr", 0);