diff options
Diffstat (limited to 'data/vim/patches/8.1.0933')
-rw-r--r-- | data/vim/patches/8.1.0933 | 473 |
1 files changed, 473 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0933 b/data/vim/patches/8.1.0933 new file mode 100644 index 000000000..693c17933 --- /dev/null +++ b/data/vim/patches/8.1.0933 @@ -0,0 +1,473 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0933 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0933 +Problem: When using VTP scroll region isn't used properly. +Solution: Make better use of the scroll region. (Nobuhiro Takasaki, + closes #3974) +Files: src/os_win32.c, src/term.c + + +*** ../vim-8.1.0932/src/os_win32.c 2019-02-16 14:07:34.326138106 +0100 +--- src/os_win32.c 2019-02-16 16:44:59.511679299 +0100 +*************** +*** 171,176 **** +--- 171,179 ---- + static void scroll(unsigned cLines); + static void set_scroll_region(unsigned left, unsigned top, + unsigned right, unsigned bottom); ++ static void set_scroll_region_tb(unsigned top, unsigned bottom); ++ static void set_scroll_region_lr(unsigned left, unsigned right); ++ static void insert_lines(unsigned cLines); + static void delete_lines(unsigned cLines); + static void gotoxy(unsigned x, unsigned y); + static void standout(void); +*************** +*** 5392,5398 **** + + if (handles[0] == INVALID_HANDLE_VALUE) + { +! CloseHandle(handles[1]); + return FALSE; + } + +--- 5395,5401 ---- + + if (handles[0] == INVALID_HANDLE_VALUE) + { +! CloseHandle(handles[1]); + return FALSE; + } + +*************** +*** 5976,5984 **** + g_srScrollRegion.Top = top; + g_srScrollRegion.Right = right; + g_srScrollRegion.Bottom = bottom; + +! if (USE_VTP) +! vtp_printf("\033[%d;%dr", top + 1, bottom + 1); + } + + +--- 5979,6008 ---- + g_srScrollRegion.Top = top; + g_srScrollRegion.Right = right; + g_srScrollRegion.Bottom = bottom; ++ } ++ ++ static void ++ set_scroll_region_tb( ++ unsigned top, ++ unsigned bottom) ++ { ++ if (top >= bottom || bottom > (unsigned)Rows - 1) ++ return; + +! g_srScrollRegion.Top = top; +! g_srScrollRegion.Bottom = bottom; +! } +! +! static void +! set_scroll_region_lr( +! unsigned left, +! unsigned right) +! { +! if (left >= right || right > (unsigned)Columns - 1) +! return; +! +! g_srScrollRegion.Left = left; +! g_srScrollRegion.Right = right; + } + + +*************** +*** 5988,6034 **** + static void + insert_lines(unsigned cLines) + { +! SMALL_RECT source; + COORD dest; + CHAR_INFO fill; + +! dest.X = 0; + dest.Y = g_coord.Y + cLines; + +! source.Left = 0; + source.Top = g_coord.Y; + source.Right = g_srScrollRegion.Right; + source.Bottom = g_srScrollRegion.Bottom - cLines; + +! if (!USE_VTP) + { + fill.Char.AsciiChar = ' '; +! fill.Attributes = g_attrCurrent; + +- ScrollConsoleScreenBuffer(g_hConOut, &source, NULL, dest, &fill); +- } +- else +- { + set_console_color_rgb(); + +! gotoxy(1, source.Top + 1); +! vtp_printf("\033[%dT", cLines); + } +! +! /* 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... +! * vim expects cdd consistently... So we have to deal with that +! * here... (this also occurs scrolling the same way in the other +! * direction). */ + + if (source.Bottom < dest.Y) + { + COORD coord; + +! coord.X = 0; +! coord.Y = source.Bottom; +! clear_chars(coord, Columns * (dest.Y - source.Bottom)); + } + } + +--- 6012,6060 ---- + static void + insert_lines(unsigned cLines) + { +! SMALL_RECT source, clip; + COORD dest; + CHAR_INFO fill; + +! dest.X = g_srScrollRegion.Left; + dest.Y = g_coord.Y + cLines; + +! source.Left = g_srScrollRegion.Left; + source.Top = g_coord.Y; + source.Right = g_srScrollRegion.Right; + source.Bottom = g_srScrollRegion.Bottom - cLines; + +! clip.Left = g_srScrollRegion.Left; +! clip.Top = g_coord.Y; +! clip.Right = g_srScrollRegion.Right; +! clip.Bottom = g_srScrollRegion.Bottom; +! + { + fill.Char.AsciiChar = ' '; +! 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... +! // vim expects cdd consistently... So we have to deal with that +! // here... (this also occurs scrolling the same way in the other +! // direction). + + if (source.Bottom < dest.Y) + { + COORD coord; ++ int i; + +! coord.X = source.Left; +! for (i = clip.Top; i < dest.Y; ++i) +! { +! coord.Y = i; +! clear_chars(coord, source.Right - source.Left + 1); +! } + } + } + +*************** +*** 6039,6088 **** + static void + delete_lines(unsigned cLines) + { +! SMALL_RECT source; + COORD dest; + CHAR_INFO fill; + int nb; + +! dest.X = 0; + dest.Y = g_coord.Y; + +! source.Left = 0; + source.Top = g_coord.Y + cLines; + source.Right = g_srScrollRegion.Right; + source.Bottom = g_srScrollRegion.Bottom; + +! if (!USE_VTP) + { + fill.Char.AsciiChar = ' '; +! fill.Attributes = g_attrCurrent; + +- ScrollConsoleScreenBuffer(g_hConOut, &source, NULL, dest, &fill); +- } +- else +- { + set_console_color_rgb(); + +! gotoxy(1, source.Top + 1); +! vtp_printf("\033[%dS", cLines); + } +! +! /* 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... +! * vim expects cdd consistently... So we have to deal with that +! * here... (this also occurs scrolling the same way in the other +! * direction). */ + + nb = dest.Y + (source.Bottom - source.Top) + 1; + + if (nb < source.Top) + { + COORD coord; + +! coord.X = 0; +! coord.Y = nb; +! clear_chars(coord, Columns * (source.Top - nb)); + } + } + +--- 6065,6112 ---- + static void + delete_lines(unsigned cLines) + { +! SMALL_RECT source, clip; + COORD dest; + CHAR_INFO fill; + int nb; + +! dest.X = g_srScrollRegion.Left; + dest.Y = g_coord.Y; + +! source.Left = g_srScrollRegion.Left; + source.Top = g_coord.Y + cLines; + source.Right = g_srScrollRegion.Right; + source.Bottom = g_srScrollRegion.Bottom; + +! clip.Left = g_srScrollRegion.Left; +! clip.Top = g_coord.Y; +! clip.Right = g_srScrollRegion.Right; +! clip.Bottom = g_srScrollRegion.Bottom; +! + { + fill.Char.AsciiChar = ' '; +! 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. + + nb = dest.Y + (source.Bottom - source.Top) + 1; + + if (nb < source.Top) + { + COORD coord; ++ int i; + +! coord.X = source.Left; +! for (i = nb; i < clip.Bottom; ++i) +! { +! coord.Y = i; +! clear_chars(coord, source.Right - source.Left + 1); +! } + } + } + +*************** +*** 6508,6513 **** +--- 6532,6545 ---- + { + set_scroll_region(0, arg1 - 1, Columns - 1, arg2 - 1); + } ++ else if (argc == 2 && *p == 'R') ++ { ++ set_scroll_region_tb(arg1, arg2); ++ } ++ else if (argc == 2 && *p == 'V') ++ { ++ set_scroll_region_lr(arg1, arg2); ++ } + else if (argc == 1 && *p == 'A') + { + gotoxy(g_coord.X + 1, +*** ../vim-8.1.0932/src/term.c 2019-02-12 20:46:45.247272511 +0100 +--- src/term.c 2019-02-16 16:46:22.787339791 +0100 +*************** +*** 540,602 **** + * are also translated in os_win32.c. + */ + {(int)KS_NAME, "win32"}, +! {(int)KS_CE, "\033|K"}, /* clear to end of line */ +! {(int)KS_AL, "\033|L"}, /* add new blank line */ + # ifdef TERMINFO +! {(int)KS_CAL, "\033|%p1%dL"}, /* add number of new blank lines */ + # else +! {(int)KS_CAL, "\033|%dL"}, /* add number of new blank lines */ + # endif +! {(int)KS_DL, "\033|M"}, /* delete line */ + # ifdef TERMINFO +! {(int)KS_CDL, "\033|%p1%dM"}, /* delete number of lines */ + # else +! {(int)KS_CDL, "\033|%dM"}, /* delete number of lines */ + # endif +! {(int)KS_CL, "\033|J"}, /* clear screen */ +! {(int)KS_CD, "\033|j"}, /* clear to end of display */ +! {(int)KS_VI, "\033|v"}, /* cursor invisible */ +! {(int)KS_VE, "\033|V"}, /* cursor visible */ +! +! {(int)KS_ME, "\033|0m"}, /* normal */ +! {(int)KS_MR, "\033|112m"}, /* reverse: black on lightgray */ +! {(int)KS_MD, "\033|15m"}, /* bold: white on black */ + #if 1 +! {(int)KS_SO, "\033|31m"}, /* standout: white on blue */ +! {(int)KS_SE, "\033|0m"}, /* standout end */ + #else +! {(int)KS_SO, "\033|F"}, /* standout: high intensity */ +! {(int)KS_SE, "\033|f"}, /* standout end */ + #endif +! {(int)KS_CZH, "\033|225m"}, /* italic: blue text on yellow */ +! {(int)KS_CZR, "\033|0m"}, /* italic end */ +! {(int)KS_US, "\033|67m"}, /* underscore: cyan text on red */ +! {(int)KS_UE, "\033|0m"}, /* underscore end */ +! {(int)KS_CCO, "16"}, /* allow 16 colors */ + # ifdef TERMINFO +! {(int)KS_CAB, "\033|%p1%db"}, /* set background color */ +! {(int)KS_CAF, "\033|%p1%df"}, /* set foreground color */ + # else +! {(int)KS_CAB, "\033|%db"}, /* set background color */ +! {(int)KS_CAF, "\033|%df"}, /* set foreground color */ + # endif + +! {(int)KS_MS, "y"}, /* save to move cur in reverse mode */ + {(int)KS_UT, "y"}, + {(int)KS_XN, "y"}, + {(int)KS_LE, "\b"}, + # ifdef TERMINFO +! {(int)KS_CM, "\033|%i%p1%d;%p2%dH"},/* cursor motion */ + # else +! {(int)KS_CM, "\033|%i%d;%dH"},/* cursor motion */ + # endif +! {(int)KS_VB, "\033|B"}, /* visual bell */ +! {(int)KS_TI, "\033|S"}, /* put terminal in termcap mode */ +! {(int)KS_TE, "\033|E"}, /* out of termcap mode */ + # ifdef TERMINFO +! {(int)KS_CS, "\033|%i%p1%d;%p2%dr"},/* scroll region */ + # else +! {(int)KS_CS, "\033|%i%d;%dr"},/* scroll region */ + # endif + # ifdef FEAT_TERMGUICOLORS + {(int)KS_8F, "\033|38;2;%lu;%lu;%lum"}, +--- 540,604 ---- + * are also translated in os_win32.c. + */ + {(int)KS_NAME, "win32"}, +! {(int)KS_CE, "\033|K"}, // clear to end of line +! {(int)KS_AL, "\033|L"}, // add new blank line + # ifdef TERMINFO +! {(int)KS_CAL, "\033|%p1%dL"}, // add number of new blank lines + # else +! {(int)KS_CAL, "\033|%dL"}, // add number of new blank lines + # endif +! {(int)KS_DL, "\033|M"}, // delete line + # ifdef TERMINFO +! {(int)KS_CDL, "\033|%p1%dM"}, // delete number of lines +! {(int)KS_CSV, "\033|%p1%d;%p2%dV"}, + # else +! {(int)KS_CDL, "\033|%dM"}, // delete number of lines +! {(int)KS_CSV, "\033|%d;%dV"}, + # endif +! {(int)KS_CL, "\033|J"}, // clear screen +! {(int)KS_CD, "\033|j"}, // clear to end of display +! {(int)KS_VI, "\033|v"}, // cursor invisible +! {(int)KS_VE, "\033|V"}, // cursor visible +! +! {(int)KS_ME, "\033|0m"}, // normal +! {(int)KS_MR, "\033|112m"}, // reverse: black on lightgray +! {(int)KS_MD, "\033|15m"}, // bold: white on black + #if 1 +! {(int)KS_SO, "\033|31m"}, // standout: white on blue +! {(int)KS_SE, "\033|0m"}, // standout end + #else +! {(int)KS_SO, "\033|F"}, // standout: high intensity +! {(int)KS_SE, "\033|f"}, // standout end + #endif +! {(int)KS_CZH, "\033|225m"}, // italic: blue text on yellow +! {(int)KS_CZR, "\033|0m"}, // italic end +! {(int)KS_US, "\033|67m"}, // underscore: cyan text on red +! {(int)KS_UE, "\033|0m"}, // underscore end +! {(int)KS_CCO, "16"}, // allow 16 colors + # ifdef TERMINFO +! {(int)KS_CAB, "\033|%p1%db"}, // set background color +! {(int)KS_CAF, "\033|%p1%df"}, // set foreground color + # else +! {(int)KS_CAB, "\033|%db"}, // set background color +! {(int)KS_CAF, "\033|%df"}, // set foreground color + # endif + +! {(int)KS_MS, "y"}, // save to move cur in reverse mode + {(int)KS_UT, "y"}, + {(int)KS_XN, "y"}, + {(int)KS_LE, "\b"}, + # ifdef TERMINFO +! {(int)KS_CM, "\033|%i%p1%d;%p2%dH"}, // cursor motion + # else +! {(int)KS_CM, "\033|%i%d;%dH"}, // cursor motion + # endif +! {(int)KS_VB, "\033|B"}, // visual bell +! {(int)KS_TI, "\033|S"}, // put terminal in termcap mode +! {(int)KS_TE, "\033|E"}, // out of termcap mode + # ifdef TERMINFO +! {(int)KS_CS, "\033|%i%p1%d;%p2%dr"}, // scroll region + # else +! {(int)KS_CS, "\033|%i%d;%dr"}, // scroll region + # endif + # ifdef FEAT_TERMGUICOLORS + {(int)KS_8F, "\033|38;2;%lu;%lu;%lum"}, +*************** +*** 6778,6786 **** +--- 6780,6792 ---- + # ifdef TERMINFO + {(int)KS_CAB, "\033|%p1%db", "\033|%p14%dm"}, // set background color + {(int)KS_CAF, "\033|%p1%df", "\033|%p13%dm"}, // set foreground color ++ {(int)KS_CS, "\033|%p1%d;%p2%dR", "\033|%p1%d;%p2%dR"}, ++ {(int)KS_CSV, "\033|%p1%d;%p2%dV", "\033|%p1%d;%p2%dV"}, + # else + {(int)KS_CAB, "\033|%db", "\033|4%dm"}, // set background color + {(int)KS_CAF, "\033|%df", "\033|3%dm"}, // set foreground color ++ {(int)KS_CS, "\033|%d;%dR", "\033|%d;%dR"}, ++ {(int)KS_CSV, "\033|%d;%dV", "\033|%d;%dV"}, + # endif + {(int)KS_CCO, "256", "256"}, // colors + {(int)KS_NAME} // terminator +*** ../vim-8.1.0932/src/version.c 2019-02-16 15:09:21.225946157 +0100 +--- src/version.c 2019-02-16 16:46:41.599260036 +0100 +*************** +*** 781,782 **** +--- 781,784 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 933, + /**/ + +-- +FIRST VILLAGER: We have found a witch. May we burn her? + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |