# HG changeset patch # User Bram Moolenaar # Date 1552831207 -3600 # Node ID 7e33709a3d0a0f2abac67d1c40b3be455a06eeca # Parent e90dfd2825af4b9fd03b4f9e6f8ceab6a4f24c1c patch 8.1.1013: MS-Windows: Scrolling fails when dividing the screen commit https://github.com/vim/vim/commit/3b5fef6a995f25a8a8f746896de44df49b69dfdf Author: Bram Moolenaar Date: Sun Mar 17 14:54:53 2019 +0100 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 --- 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; - - set_console_color_rgb(); - - ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - } + fill.Char.AsciiChar = ' '; + if (!USE_VTP) + fill.Attributes = g_attrCurrent; + else + fill.Attributes = g_attrDefault; + + set_console_color_rgb(); + + 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; - - set_console_color_rgb(); - - ScrollConsoleScreenBuffer(g_hConOut, &source, &clip, dest, &fill); - } + fill.Char.AsciiChar = ' '; + if (!USE_VTP) + fill.Attributes = g_attrCurrent; + else + fill.Attributes = g_attrDefault; + + set_console_color_rgb(); + + 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 --- a/src/version.c +++ b/src/version.c @@ -780,6 +780,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1013, +/**/ 1012, /**/ 1011,