0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.0.0115: when 'cmdheight' is zero pressing ':' may scroll a window

Problem:    When 'cmdheight' is zero pressing ':' may scroll a window.
Solution:   Add the made_cmdheight_nonzero flag and set 'scrolloff' to zero.
This commit is contained in:
Bram Moolenaar 2022-07-30 19:10:06 +01:00
parent f39cfb7262
commit 6747cf1671
4 changed files with 18 additions and 3 deletions

View File

@ -1615,10 +1615,17 @@ getcmdline_int(
if (cmdheight0) if (cmdheight0)
{ {
// If cmdheight is 0, cmdheight must be set to 1 when we enter command int save_so = lastwin->w_p_so;
// line.
// If cmdheight is 0, cmdheight must be set to 1 when we enter the
// command line. Set "made_cmdheight_nonzero" and reset 'scrolloff' to
// avoid scrolling the last window.
made_cmdheight_nonzero = TRUE;
lastwin->w_p_so = 0;
set_option_value((char_u *)"ch", 1L, NULL, 0); set_option_value((char_u *)"ch", 1L, NULL, 0);
update_screen(VALID); // redraw the screen NOW update_screen(VALID); // redraw the screen NOW
made_cmdheight_nonzero = FALSE;
lastwin->w_p_so = save_so;
} }
// one recursion level deeper // one recursion level deeper
@ -2606,9 +2613,11 @@ theend:
if (cmdheight0) if (cmdheight0)
{ {
made_cmdheight_nonzero = TRUE;
set_option_value((char_u *)"ch", 0L, NULL, 0); set_option_value((char_u *)"ch", 0L, NULL, 0);
// Redraw is needed for command line completion // Redraw is needed for command line completion
redraw_all_later(CLEAR); redraw_all_later(CLEAR);
made_cmdheight_nonzero = FALSE;
} }
--depth; --depth;

View File

@ -1728,3 +1728,6 @@ EXTERN int channel_need_redraw INIT(= FALSE);
// While executing a regexp and set to OPTION_MAGIC_ON or OPTION_MAGIC_OFF this // While executing a regexp and set to OPTION_MAGIC_ON or OPTION_MAGIC_OFF this
// overrules p_magic. Otherwise set to OPTION_MAGIC_NOT_SET. // overrules p_magic. Otherwise set to OPTION_MAGIC_NOT_SET.
EXTERN optmagic_T magic_overruled INIT(= OPTION_MAGIC_NOT_SET); EXTERN optmagic_T magic_overruled INIT(= OPTION_MAGIC_NOT_SET);
// Set when 'cmdheight' is changed from non-zero to one temporarily.
EXTERN int made_cmdheight_nonzero INIT(= FALSE);

View File

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

View File

@ -6365,7 +6365,8 @@ win_new_height(win_T *wp, int height)
// There is no point in adjusting the scroll position when exiting. Some // There is no point in adjusting the scroll position when exiting. Some
// values might be invalid. // values might be invalid.
if (!exiting) // Skip scroll_to_fraction() when 'cmdheight' was set to one from zero.
if (!exiting && !made_cmdheight_nonzero)
scroll_to_fraction(wp, prev_height); scroll_to_fraction(wp, prev_height);
} }