aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/window.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-09-02 19:05:33 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-09-02 19:54:06 -0400
commitc0cb7585cc6b9d408811b95bb5462789f5ca0207 (patch)
treeac7fbe4b657d960bd6babdfd8403930bf4a5170c /src/nvim/window.c
parent02f126a2758e834a7e9dfbae0ede48bf8b90512f (diff)
downloadrneovim-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.c41
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;
}
}
}