From 3b5fef6a995f25a8a8f746896de44df49b69dfdf Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 17 Mar 2019 14:54:53 +0100 Subject: 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) --- src/os_win32.c | 38 ++++++++++++++++++++------------------ src/version.c | 2 ++ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/os_win32.c b/src/os_win32.c index 876a7a409a..ff11777220 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 91f05b9295..8b3bc69549 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, /**/ -- cgit v1.2.3