From: Bram Moolenaar Date: Sun, 17 Mar 2019 13:54:53 +0000 (+0100) Subject: patch 8.1.1013: MS-Windows: Scrolling fails when dividing the screen X-Git-Tag: v8.1.1013 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b5fef6a995f25a8a8f746896de44df49b69dfdf;p=vim patch 8.1.1013: MS-Windows: Scrolling fails when dividing the screen Problem: MS-Windows: Scrolling fails when dividing the screen. Solution: Position the cursor before calling ScrollConsoleScreenBuffer(). (Nobuhiro Takasaki, closes #4115) --- diff --git a/src/os_win32.c b/src/os_win32.c index 876a7a409..ff1177722 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -6024,6 +6024,8 @@ insert_lines(unsigned cLines) COORD dest; CHAR_INFO fill; + gotoxy(g_srScrollRegion.Left + 1, g_srScrollRegion.Top + 1); + dest.X = g_srScrollRegion.Left; dest.Y = g_coord.Y + cLines; @@ -6037,17 +6039,16 @@ insert_lines(unsigned cLines) clip.Right = g_srScrollRegion.Right; clip.Bottom = g_srScrollRegion.Bottom; - { - fill.Char.AsciiChar = ' '; - if (!USE_VTP) - fill.Attributes = g_attrCurrent; - else - fill.Attributes = g_attrDefault; + fill.Char.AsciiChar = ' '; + if (!USE_VTP) + fill.Attributes = g_attrCurrent; + else + fill.Attributes = g_attrDefault; - set_console_color_rgb(); + set_console_color_rgb(); + + ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - } // Here we have to deal with a win32 console flake: If the scroll // region looks like abc and we scroll c to a and fill with d we get // cbd... if we scroll block c one line at a time to a, we get cdd... @@ -6081,6 +6082,8 @@ delete_lines(unsigned cLines) CHAR_INFO fill; int nb; + gotoxy(g_srScrollRegion.Left + 1, g_srScrollRegion.Top + 1); + dest.X = g_srScrollRegion.Left; dest.Y = g_coord.Y; @@ -6094,17 +6097,16 @@ delete_lines(unsigned cLines) clip.Right = g_srScrollRegion.Right; clip.Bottom = g_srScrollRegion.Bottom; - { - fill.Char.AsciiChar = ' '; - if (!USE_VTP) - fill.Attributes = g_attrCurrent; - else - fill.Attributes = g_attrDefault; + fill.Char.AsciiChar = ' '; + if (!USE_VTP) + fill.Attributes = g_attrCurrent; + else + fill.Attributes = g_attrDefault; - set_console_color_rgb(); + set_console_color_rgb(); + + ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - } // Here we have to deal with a win32 console flake; See insert_lines() // above. diff --git a/src/version.c b/src/version.c index 91f05b929..8b3bc6954 100644 --- a/src/version.c +++ b/src/version.c @@ -779,6 +779,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1013, /**/ 1012, /**/