To: vim_dev@googlegroups.com Subject: Patch 8.1.0046 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.0046 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 #2970) Files: src/testdir/test_mksession.vim, src/option.c, src/window.c, src/proto/window.pro *** ../vim-8.1.0045/src/testdir/test_mksession.vim 2018-03-09 21:25:55.000000000 +0100 --- src/testdir/test_mksession.vim 2018-06-12 16:38:40.344105918 +0200 *************** *** 106,118 **** func Test_mksession_winheight() new ! set winheight=10 winminheight=2 mksession! Xtest_mks.out source Xtest_mks.out call delete('Xtest_mks.out') endfunc func Test_mksession_arglist() argdel * next file1 file2 file3 file4 --- 106,127 ---- func Test_mksession_winheight() new ! set winheight=10 ! set winminheight=2 mksession! Xtest_mks.out source Xtest_mks.out call delete('Xtest_mks.out') endfunc + func Test_mksession_large_winheight() + set winheight=999 + mksession! Xtest_mks_winheight.out + set winheight& + source Xtest_mks_winheight.out + call delete('Xtest_mks_winheight.out') + endfunc + func Test_mksession_arglist() argdel * next file1 file2 file3 file4 *** ../vim-8.1.0045/src/option.c 2018-06-04 17:28:04.729961269 +0200 --- src/option.c 2018-06-12 16:34:27.832376913 +0200 *************** *** 8796,8801 **** --- 8796,8802 ---- */ if (pp == &p_wh || pp == &p_hh) { + // 'winheight' and 'helpheight' if (p_wh < 1) { errmsg = e_positive; *************** *** 8821,8830 **** win_setheight((int)p_hh); } } - - /* 'winminheight' */ else if (pp == &p_wmh) { if (p_wmh < 0) { errmsg = e_positive; --- 8822,8830 ---- win_setheight((int)p_hh); } } else if (pp == &p_wmh) { + // 'winminheight' if (p_wmh < 0) { errmsg = e_positive; *************** *** 8839,8844 **** --- 8839,8845 ---- } else if (pp == &p_wiw) { + // 'winwidth' if (p_wiw < 1) { errmsg = e_positive; *************** *** 8854,8863 **** if (!ONE_WINDOW && curwin->w_width < p_wiw) win_setwidth((int)p_wiw); } - - /* 'winminwidth' */ else if (pp == &p_wmw) { if (p_wmw < 0) { errmsg = e_positive; --- 8855,8863 ---- if (!ONE_WINDOW && curwin->w_width < p_wiw) win_setwidth((int)p_wiw); } else if (pp == &p_wmw) { + // 'winminwidth' if (p_wmw < 0) { errmsg = e_positive; *************** *** 8868,8874 **** errmsg = e_winwidth; p_wmw = p_wiw; } ! win_setminheight(); } /* (re)set last window status line */ --- 8868,8874 ---- errmsg = e_winwidth; p_wmw = p_wiw; } ! win_setminwidth(); } /* (re)set last window status line */ *** ../vim-8.1.0045/src/window.c 2018-06-10 14:39:47.022412206 +0200 --- src/window.c 2018-06-12 16:41:04.447771813 +0200 *************** *** 5430,5457 **** } /* ! * Check 'winminheight' for a valid value. */ void win_setminheight(void) { int room; int first = TRUE; - win_T *wp; ! /* loop until there is a 'winminheight' that is possible */ while (p_wmh > 0) { ! /* TODO: handle vertical splits */ ! room = -p_wh; ! FOR_ALL_WINDOWS(wp) ! room += VISIBLE_HEIGHT(wp) - p_wmh; ! if (room >= 0) break; --p_wmh; if (first) { EMSG(_(e_noroom)); first = FALSE; } } --- 5430,5481 ---- } /* ! * Check 'winminheight' for a valid value and reduce it if needed. */ void win_setminheight(void) { int room; + int needed; int first = TRUE; ! // loop until there is a 'winminheight' that is possible while (p_wmh > 0) { ! room = Rows - p_ch; ! needed = frame_minheight(topframe, NULL); ! if (room >= needed) break; --p_wmh; if (first) { EMSG(_(e_noroom)); + first = FALSE; + } + } + } + + /* + * Check 'winminwidth' for a valid value and reduce it if needed. + */ + void + win_setminwidth(void) + { + int room; + int needed; + int first = TRUE; + + // loop until there is a 'winminheight' that is possible + while (p_wmw > 0) + { + room = Columns; + needed = frame_minwidth(topframe, NULL); + if (room >= needed) + break; + --p_wmw; + if (first) + { + EMSG(_(e_noroom)); first = FALSE; } } *** ../vim-8.1.0045/src/proto/window.pro 2018-05-17 13:52:56.000000000 +0200 --- src/proto/window.pro 2018-06-12 16:34:10.876376437 +0200 *************** *** 54,59 **** --- 54,60 ---- void win_setwidth(int width); void win_setwidth_win(int width, win_T *wp); void win_setminheight(void); + void win_setminwidth(void); void win_drag_status_line(win_T *dragwin, int offset); void win_drag_vsep_line(win_T *dragwin, int offset); void set_fraction(win_T *wp); *** ../vim-8.1.0045/src/version.c 2018-06-12 15:22:39.640579965 +0200 --- src/version.c 2018-06-12 16:01:12.917283351 +0200 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 46, /**/ -- He who laughs last, thinks slowest. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///