diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-01-30 11:53:59 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-01-30 11:53:59 +0100 |
commit | df54382eacdbfa10291adb80ad6b89ad83bd7c9b (patch) | |
tree | 606046b076419a8e32df9d2e6383083792567261 /src/os_win32.c | |
parent | 70b3e706b40fc2c84c1f9f33fa64945a481df395 (diff) | |
download | vim-git-df54382eacdbfa10291adb80ad6b89ad83bd7c9b.tar.gz |
patch 8.2.0178: with VTP the screen may not be restored properlyv8.2.0178
Problem: With VTP the screen may not be restored properly.
Solution: Add another set of saved RGB values. (Nobuhiro Takasaki,
closes #5548)
Diffstat (limited to 'src/os_win32.c')
-rw-r--r-- | src/os_win32.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/os_win32.c b/src/os_win32.c index 6bbd49205..7dc37a111 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -200,6 +200,8 @@ static void vtp_sgr_bulks(int argc, int *argv); static guicolor_T save_console_bg_rgb; static guicolor_T save_console_fg_rgb; +static guicolor_T store_console_bg_rgb; +static guicolor_T store_console_fg_rgb; static int g_color_index_bg = 0; static int g_color_index_fg = 7; @@ -217,6 +219,7 @@ static int default_console_color_fg = 0xc0c0c0; // white static void set_console_color_rgb(void); static void reset_console_color_rgb(void); +static void restore_console_color_rgb(void); #endif // This flag is newly created from Windows 10 @@ -5496,7 +5499,7 @@ termcap_mode_end(void) cb = &g_cbNonTermcap; # endif RestoreConsoleBuffer(cb, p_rs); - reset_console_color_rgb(); + restore_console_color_rgb(); SetConsoleCursorInfo(g_hConOut, &g_cci); if (p_rs || exiting) @@ -7327,6 +7330,8 @@ vtp_init(void) pGetConsoleScreenBufferInfoEx(g_hConOut, &csbi); save_console_bg_rgb = (guicolor_T)csbi.ColorTable[g_color_index_bg]; save_console_fg_rgb = (guicolor_T)csbi.ColorTable[g_color_index_fg]; + store_console_bg_rgb = save_console_bg_rgb; + store_console_fg_rgb = save_console_fg_rgb; # ifdef FEAT_TERMGUICOLORS bg = (COLORREF)csbi.ColorTable[g_color_index_bg]; @@ -7343,7 +7348,7 @@ vtp_init(void) static void vtp_exit(void) { - reset_console_color_rgb(); + restore_console_color_rgb(); } static int @@ -7433,6 +7438,8 @@ set_console_color_rgb(void) csbi.cbSize = sizeof(csbi); csbi.srWindow.Right += 1; csbi.srWindow.Bottom += 1; + store_console_bg_rgb = csbi.ColorTable[g_color_index_bg]; + store_console_fg_rgb = csbi.ColorTable[g_color_index_fg]; csbi.ColorTable[g_color_index_bg] = (COLORREF)bg; csbi.ColorTable[g_color_index_fg] = (COLORREF)fg; if (has_csbiex) @@ -7485,6 +7492,9 @@ get_default_console_color( } # endif +/* + * Set the console colors to the original colors or the last set colors. + */ static void reset_console_color_rgb(void) { @@ -7498,6 +7508,29 @@ reset_console_color_rgb(void) csbi.cbSize = sizeof(csbi); csbi.srWindow.Right += 1; csbi.srWindow.Bottom += 1; + csbi.ColorTable[g_color_index_bg] = (COLORREF)store_console_bg_rgb; + csbi.ColorTable[g_color_index_fg] = (COLORREF)store_console_fg_rgb; + if (has_csbiex) + pSetConsoleScreenBufferInfoEx(g_hConOut, &csbi); +# endif +} + +/* + * Set the console colors to the original colors. + */ + static void +restore_console_color_rgb(void) +{ +# ifdef FEAT_TERMGUICOLORS + DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi; + + csbi.cbSize = sizeof(csbi); + if (has_csbiex) + pGetConsoleScreenBufferInfoEx(g_hConOut, &csbi); + + csbi.cbSize = sizeof(csbi); + csbi.srWindow.Right += 1; + csbi.srWindow.Bottom += 1; csbi.ColorTable[g_color_index_bg] = (COLORREF)save_console_bg_rgb; csbi.ColorTable[g_color_index_fg] = (COLORREF)save_console_fg_rgb; if (has_csbiex) |