Mercurial > vim
changeset 26468:2fc13817b100 v8.2.3764
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 <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 09 Dec 2021 13:00:06 +0100 |
parents | 25348fc7dfb6 |
children | 8e3d1d2500bb |
files | src/edit.c src/normal.c src/proto/window.pro src/testdir/test_window_cmd.vim src/version.c src/window.c |
diffstat | 6 files changed, 59 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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
--- 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);
--- 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(" \<Esc>", 't!')}) + call feedkeys('a', 'tx!') + call assert_equal(1, winheight(0)) + bwipe! + endif + + set winminwidth& winminheight& +endfunc + + " vim: shiftwidth=2 sts=2 expandtab
--- 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,
--- 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. */