patch 9.1.0768: MS-Windows: incorrect cursor position when restoring screen

Commit: 
https://github.com/vim/vim/commit/ded59139fde2ba509abbe97f2f23b54080ed59f2
Author: William Bresler <wbres...@gmail.com>
Date:   Tue Oct 8 21:30:48 2024 +0200

    patch 9.1.0768: MS-Windows: incorrect cursor position when restoring screen
    
    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 <wbres...@gmail.com>
    Signed-off-by: Ken Takata <ken...@csc.jp>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/os_win32.c b/src/os_win32.c
index e5351b1ce..81a31409d 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -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(" [?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(" [?1049l");
+
     if (!USE_WT && (p_rs || exiting))
     {
        /*
diff --git a/src/version.c b/src/version.c
index 854865f6b..bff689e65 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    768,
 /**/
     767,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1syG8l-003aD0-HX%40256bit.org.

Raspunde prin e-mail lui