diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-09-02 19:05:33 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-09-02 19:54:06 -0400 |
commit | c0cb7585cc6b9d408811b95bb5462789f5ca0207 (patch) | |
tree | ac7fbe4b657d960bd6babdfd8403930bf4a5170c /src/nvim/window.c | |
parent | 02f126a2758e834a7e9dfbae0ede48bf8b90512f (diff) | |
download | rneovim-c0cb7585cc6b9d408811b95bb5462789f5ca0207.tar.gz rneovim-c0cb7585cc6b9d408811b95bb5462789f5ca0207.tar.bz2 rneovim-c0cb7585cc6b9d408811b95bb5462789f5ca0207.zip |
vim-patch:8.1.0046: loading a session file fails if 'winheight' is big
Problem: Loading a session file fails if 'winheight' is a big number.
Solution: Set 'minwinheight' to zero at first. Don't give an error when
setting 'minwinheight' while 'winheight' is a big number.
Fix using vertical splits. Fix setting 'minwinwidth'.
(closes vim/vim#2970)
https://github.com/vim/vim/commit/1c3c10492a291270fa89b3c8df11828792f927d3
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r-- | src/nvim/window.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 0e8cfcedf5..6861e19ca7 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -5229,27 +5229,42 @@ static void frame_setwidth(frame_T *curfrp, int width) } } -/* - * Check 'winminheight' for a valid value. - */ +// Check 'winminheight' for a valid value and reduce it if needed. void win_setminheight(void) { - int room; - int first = TRUE; + bool first = true; - /* loop until there is a 'winminheight' that is possible */ + // loop until there is a 'winminheight' that is possible while (p_wmh > 0) { - /* TODO: handle vertical splits */ - room = -p_wh; - FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - room += wp->w_height - p_wmh; + const int room = Rows - p_ch; + const int needed = frame_minheight(topframe, NULL); + if (room >= needed) { + break; + } + p_wmh--; + if (first) { + EMSG(_(e_noroom)); + first = false; } - if (room >= 0) + } +} + +// Check 'winminwidth' for a valid value and reduce it if needed. +void win_setminwidth(void) +{ + bool first = true; + + // loop until there is a 'winminheight' that is possible + while (p_wmw > 0) { + const int room = Columns; + const int needed = frame_minwidth(topframe, NULL); + if (room >= needed) { break; - --p_wmh; + } + p_wmw--; if (first) { EMSG(_(e_noroom)); - first = FALSE; + first = false; } } } |