]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0768: MS-Windows: incorrect cursor position when restoring screen v9.1.0768
authorWilliam Bresler <wbresler@gmail.com>
Tue, 8 Oct 2024 19:30:48 +0000 (21:30 +0200)
committerChristian Brabandt <cb@256bit.org>
Tue, 8 Oct 2024 19:42:46 +0000 (21:42 +0200)
Problem:  MS-Windows: incorrect cursor position when restoring screen
          (after v9.1.0664)
Solution: Restore the VTP command for switching screens back to
          termcap_mode_end() (William Bresler)

Patch 9.1.0664 moved the VTP command for switching back to the main
screen buffer from termcap_mode_end() to mch_exit_c().  However, the
saved cursor position from the main screen continued to be restored
in termcap_mode_end().  This failed if the cursor position was beyond
the console window height, since the alternate screen buffer is always
the same size as the console window.

This patch restores the VTP command for switching back to the main
screen buffer to termcap_mode_end().  In order to preserve the effect
of patch 9.1.0664, the VTP command for switching back to the main
screen buffer in mch_exit_c() is issued only if termcap mode was not
active while exiting Vim.

See issue 15775 for a fuller description, with screen shots of the
problem.

fixes: #15775
closes: #15829

Signed-off-by: William Bresler <wbresler@gmail.com>
Signed-off-by: Ken Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/os_win32.c
src/version.c

index e5351b1ce1d056094292d8fc85a18e0e835c0461..81a31409dbbb77bd1231c0feee6aee2fce14ebfe 100644 (file)
@@ -3556,13 +3556,16 @@ mch_init_c(void)
     static void
 mch_exit_c(int r)
 {
+    // Copy flag since stoptermcap() will clear the flag.
+    int fTermcapMode = g_fTermcapMode;
+
     exiting = TRUE;
 
     vtp_exit();
 
     stoptermcap();
-    // Switch back to main screen buffer.
-    if (use_alternate_screen_buffer)
+    // Switch back to main screen buffer if TermcapMode was not active.
+    if (!fTermcapMode &&  use_alternate_screen_buffer)
        vtp_printf("\033[?1049l");
 
     if (g_fWindInitCalled)
@@ -6338,6 +6341,10 @@ termcap_mode_end(void)
     RestoreConsoleBuffer(cb, p_rs);
     restore_console_color_rgb();
 
+    // Switch back to main screen buffer.
+    if (exiting && use_alternate_screen_buffer)
+        vtp_printf("\033[?1049l");
+
     if (!USE_WT && (p_rs || exiting))
     {
        /*
index 854865f6b0dd5b58a9da92542421eeb9be8f096d..bff689e65303b7a241bc1c56a670c99ab0c7a515 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    768,
 /**/
     767,
 /**/