patch 9.2.0437: MS-Windows: cursor flicker in vtp mode

Problem:  MS-Windows: cursor flicker in vtp mode
Solution: Skip mch_update_cursor() in cursor_visible() when vtp is
          active (Yasuhiro Matsumoto).

In vtp (ConPTY) mode the cursor visibility is controlled by DECTCEM
(\033[?25h / \033[?25l).  The follow-up call to mch_update_cursor() then
re-emits DECSCUSR (\033[0 q etc.) on every visibility toggle even though
the cursor shape did not change.  Some terminals briefly redisplay the
cursor when DECSCUSR arrives, so this can cause a visible flash at the
position the cursor will be moved to next (e.g. column 0 ahead of a line
redraw).

In non-vtp mode the call is still required because SetConsoleCursorInfo()
inside mch_set_cursor_shape() reads s_cursor_visible to apply the
visibility change, so keep that path unchanged.

closes: #20122

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yasuhiro Matsumoto
2026-05-03 18:37:05 +00:00
committed by Christian Brabandt
parent 77677c33de
commit 9d3019104c
2 changed files with 12 additions and 0 deletions
+10
View File
@@ -7104,9 +7104,19 @@ cursor_visible(BOOL fVisible)
s_cursor_visible = fVisible;
if (vtp_working)
{
// In vtp mode, visibility is controlled solely by DECTCEM. Skip
// mch_update_cursor() since shape is independent of visibility and
// re-emitting DECSCUSR can cause the terminal to briefly redisplay
// the cursor while a redraw is in progress.
vtp_printf("\033[?25%c", fVisible ? 'h' : 'l');
return;
}
# ifdef MCH_CURSOR_SHAPE
// Non-vtp Windows console: SetConsoleCursorInfo() consults
// s_cursor_visible inside mch_set_cursor_shape(), so the call is needed
// to apply the new visibility.
mch_update_cursor();
# endif
}
+2
View File
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
437,
/**/
436,
/**/