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>
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
}
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 437,
/**/
436,
/**/