summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-29 12:41:06 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-29 12:41:06 +0100
commitf73e5ba56f4aca1cd6e38f1c8ea24e941bf6b33f (patch)
tree767a03bdb567740d44e1f49f50e1e5123a8b421f
parent309c4e0ed7dcf42011e29976a06e6335f5ae6d1c (diff)
patch 9.0.0316: screen flickers when 'cmdheight' is zerov9.0.0316
Problem: Screen flickers when 'cmdheight' is zero. Solution: Redraw over existing text instead of clearing.
-rw-r--r--src/drawscreen.c53
-rw-r--r--src/ex_getln.c2
-rw-r--r--src/version.c2
3 files changed, 31 insertions, 26 deletions
diff --git a/src/drawscreen.c b/src/drawscreen.c
index ecbdd9f0f2..529792f06c 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -170,38 +170,41 @@ update_screen(int type_arg)
if (msg_scrolled)
{
clear_cmdline = TRUE;
- if (msg_scrolled > Rows - 5) // clearing is faster
- type = UPD_CLEAR;
- else if (type != UPD_CLEAR)
+ if (type != UPD_CLEAR)
{
- check_for_delay(FALSE);
- if (screen_ins_lines(0, 0, msg_scrolled, (int)Rows, 0, NULL)
- == FAIL)
- type = UPD_CLEAR;
- FOR_ALL_WINDOWS(wp)
+ if (msg_scrolled > Rows - 5) // redrawing is faster
+ type = UPD_NOT_VALID;
+ else
{
- if (wp->w_winrow < msg_scrolled)
+ check_for_delay(FALSE);
+ if (screen_ins_lines(0, 0, msg_scrolled, (int)Rows, 0, NULL)
+ == FAIL)
+ type = UPD_NOT_VALID;
+ FOR_ALL_WINDOWS(wp)
{
- if (W_WINROW(wp) + wp->w_height > msg_scrolled
- && wp->w_redr_type < UPD_REDRAW_TOP
- && wp->w_lines_valid > 0
- && wp->w_topline == wp->w_lines[0].wl_lnum)
- {
- wp->w_upd_rows = msg_scrolled - W_WINROW(wp);
- wp->w_redr_type = UPD_REDRAW_TOP;
- }
- else
+ if (wp->w_winrow < msg_scrolled)
{
- wp->w_redr_type = UPD_NOT_VALID;
- if (W_WINROW(wp) + wp->w_height + wp->w_status_height
- <= msg_scrolled)
- wp->w_redr_status = TRUE;
+ if (W_WINROW(wp) + wp->w_height > msg_scrolled
+ && wp->w_redr_type < UPD_REDRAW_TOP
+ && wp->w_lines_valid > 0
+ && wp->w_topline == wp->w_lines[0].wl_lnum)
+ {
+ wp->w_upd_rows = msg_scrolled - W_WINROW(wp);
+ wp->w_redr_type = UPD_REDRAW_TOP;
+ }
+ else
+ {
+ wp->w_redr_type = UPD_NOT_VALID;
+ if (W_WINROW(wp) + wp->w_height
+ + wp->w_status_height <= msg_scrolled)
+ wp->w_redr_status = TRUE;
+ }
}
}
+ if (!no_update)
+ redraw_cmdline = TRUE;
+ redraw_tabline = TRUE;
}
- if (!no_update)
- redraw_cmdline = TRUE;
- redraw_tabline = TRUE;
}
msg_scrolled = 0;
need_wait_return = FALSE;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 58dc1524ec..f28ce8a6c5 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2582,7 +2582,7 @@ theend:
made_cmdheight_nonzero = TRUE;
set_option_value((char_u *)"ch", 0L, NULL, 0);
// Redraw is needed for command line completion
- redraw_all_later(UPD_CLEAR);
+ redraw_all_later(UPD_NOT_VALID);
made_cmdheight_nonzero = FALSE;
}
diff --git a/src/version.c b/src/version.c
index 82b43beee1..4dbe10080f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -708,6 +708,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 316,
+/**/
315,
/**/
314,