0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

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)
This commit is contained in:
Bram Moolenaar
2021-12-09 11:57:22 +00:00
parent e50507126f
commit d0fb907253
6 changed files with 59 additions and 0 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3764,
/**/
3763,
/**/

View File

@@ -5517,6 +5517,18 @@ frame_comp_pos(frame_T *topfrp, int *row, int *col)
}
}
/*
* 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.