# HG changeset patch # User Bram Moolenaar # Date 1639051206 -3600 # Node ID 2fc13817b10087ef1ce87bd3262746b6528ab9f2 # Parent 25348fc7dfb6a679e42add087815610749259064 patch 8.2.3764: cannot see any text when window was made zero lines Commit: https://github.com/vim/vim/commit/d0fb907253a5c5a71b1f231f3ddec24098fb4e21 Author: Bram Moolenaar Date: Thu Dec 9 11:57:22 2021 +0000 patch 8.2.3764: cannot see any text when window was made zero lines Problem: Cannot see any text when window was made zero lines or zero columns. Solution: Ensure there is at least one line and column. (fixes #9307) diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -618,6 +618,11 @@ edit( c = hkmap(c); // Hebrew mode mapping #endif + // If the window was made so small that nothing shows, make it at least + // one line and one column when typing. + if (KeyTyped && !KeyStuffed) + win_ensure_size(); + /* * Special handling of keys while the popup menu is visible or wanted * and the cursor is still in the completed word. Only when there is diff --git a/src/normal.c b/src/normal.c --- a/src/normal.c +++ b/src/normal.c @@ -608,6 +608,11 @@ normal_cmd( old_mapped_len = 0; // do go to Insert mode } + // If the window was made so small that nothing shows, make it at least one + // line and one column when typing a command. + if (KeyTyped && !KeyStuffed) + win_ensure_size(); + #ifdef FEAT_CMDL_INFO need_flushbuf = add_to_showcmd(c); #endif diff --git a/src/proto/window.pro b/src/proto/window.pro --- a/src/proto/window.pro +++ b/src/proto/window.pro @@ -55,6 +55,7 @@ void shell_new_columns(void); void win_size_save(garray_T *gap); void win_size_restore(garray_T *gap); int win_comp_pos(void); +void win_ensure_size(void); void win_setheight(int height); void win_setheight_win(int height, win_T *win); void win_setwidth(int width); diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim --- a/src/testdir/test_window_cmd.vim +++ b/src/testdir/test_window_cmd.vim @@ -1358,4 +1358,38 @@ func Test_close_dest_window() %bw! endfunc +func Test_window_minimal_size() + set winminwidth=0 winminheight=0 + + " check size is fixed vertically + new + call win_execute(win_getid(2), 'wincmd _') + call assert_equal(0, winheight(0)) + call feedkeys('0', 'tx') + call assert_equal(1, winheight(0)) + bwipe! + + " check size is fixed horizontally + vert new + call win_execute(win_getid(2), 'wincmd |') + call assert_equal(0, winwidth(0)) + call feedkeys('0', 'tx') + call assert_equal(1, winwidth(0)) + bwipe! + + if has('timers') + " check size is fixed in Insert mode + new + call timer_start(100, {_ -> win_execute(win_getid(2), 'wincmd _')}) + call timer_start(200, {_ -> assert_equal(0, winheight(0))}) + call timer_start(300, {_ -> feedkeys(" \", 't!')}) + call feedkeys('a', 'tx!') + call assert_equal(1, winheight(0)) + bwipe! + endif + + set winminwidth& winminheight& +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3764, +/**/ 3763, /**/ 3762, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -5518,6 +5518,18 @@ frame_comp_pos(frame_T *topfrp, int *row } /* + * Make the current window show at least one line and one column. + */ + void +win_ensure_size() +{ + if (curwin->w_height == 0) + win_setheight(1); + if (curwin->w_width == 0) + win_setwidth(1); +} + +/* * Set current window height and take care of repositioning other windows to * fit around it. */