diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-04-17 14:44:34 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-04-17 14:44:34 +0000 |
commit | 41678b5ca16c623bbe1ac8998e7b5e6a9e41165b (patch) | |
tree | 7a1c6e567652c185ca40215f05bc15eb83ff70bb /usr.bin | |
parent | 20cef6dfabc330527cd62e7d225d2116294fe81e (diff) |
Fix minimum size check on split and size of first cell on spread out
with a pane status line.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/tmux/layout.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/usr.bin/tmux/layout.c b/usr.bin/tmux/layout.c index 798ad29389f..c631eff2e2a 100644 --- a/usr.bin/tmux/layout.c +++ b/usr.bin/tmux/layout.c @@ -1,4 +1,4 @@ -/* $OpenBSD: layout.c,v 1.41 2019/04/17 14:43:49 nicm Exp $ */ +/* $OpenBSD: layout.c,v 1.42 2019/04/17 14:44:33 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -834,9 +834,9 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, int flags) { struct layout_cell *lc, *lcparent, *lcnew, *lc1, *lc2; - u_int sx, sy, xoff, yoff, size1, size2; + u_int sx, sy, xoff, yoff, size1, size2, minimum; u_int new_size, saved_size, resize_first = 0; - int full_size = (flags & SPAWN_FULLSIZE); + int full_size = (flags & SPAWN_FULLSIZE), status; /* * If full_size is specified, add a new cell at the top of the window @@ -846,6 +846,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, lc = wp->window->layout_root; else lc = wp->layout_cell; + status = options_get_number(wp->window->options, "pane-border-status"); /* Copy the old cell size. */ sx = lc->sx; @@ -860,7 +861,10 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size, return (NULL); break; case LAYOUT_TOPBOTTOM: - if (sy < PANE_MINIMUM * 2 + 1) + minimum = PANE_MINIMUM * 2 + 1; + if (status != 0) + minimum += layout_need_status(lc, status == 1); + if (sy < minimum) return (NULL); break; default: @@ -1012,22 +1016,29 @@ int layout_spread_cell(struct window *w, struct layout_cell *parent) { struct layout_cell *lc; - u_int number, each, size; - int change, changed; + u_int number, each, size, this; + int change, changed, status; number = 0; TAILQ_FOREACH (lc, &parent->cells, entry) number++; if (number <= 1) return (0); + status = options_get_number(w->options, "pane-border-status"); if (parent->type == LAYOUT_LEFTRIGHT) size = parent->sx; - else if (parent->type == LAYOUT_TOPBOTTOM) + else if (parent->type == LAYOUT_TOPBOTTOM) { size = parent->sy; - else + if (status != 0) + size -= layout_need_status(parent, status == 1); + } else + return (0); + if (size < number - 1) return (0); each = (size - (number - 1)) / number; + if (each == 0) + return (0); changed = 0; TAILQ_FOREACH (lc, &parent->cells, entry) { @@ -1038,7 +1049,10 @@ layout_spread_cell(struct window *w, struct layout_cell *parent) change = each - (int)lc->sx; layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change); } else if (parent->type == LAYOUT_TOPBOTTOM) { - change = each - (int)lc->sy; + this = each; + if (status != 0) + this += layout_need_status(lc, status == 1); + change = this - (int)lc->sy; layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change); } if (change != 0) |