Mercurial > vim
changeset 16015:7e33709a3d0a v8.1.1013
patch 8.1.1013: MS-Windows: Scrolling fails when dividing the screen
commit https://github.com/vim/vim/commit/3b5fef6a995f25a8a8f746896de44df49b69dfdf
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 17 Mar 2019 15:00:07 +0100 |
parents | e90dfd2825af |
children | a1f884a6e308 |
files | src/os_win32.c src/version.c |
diffstat | 2 files changed, 26 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- 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.