diff src/os_win32.c @ 18786:1756fe125914 v8.1.2382

patch 8.1.2382: MS-Windows: When using VTP bold+inverse doesn't work Commit: https://github.com/vim/vim/commit/a050b9471c66b383ed674bfd57ac78016199d972 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 2 21:35:31 2019 +0100 patch 8.1.2382: MS-Windows: When using VTP bold+inverse doesn't work Problem: MS-Windows: When using VTP bold+inverse doesn't work. Solution: Compare with the default colors. (Nobuhiro Takasaki, closes https://github.com/vim/vim/issues/5303)
author Bram Moolenaar <Bram@vim.org>
date Mon, 02 Dec 2019 21:45:04 +0100
parents 38a3bef525e6
children 44b855153d8e
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -7414,34 +7414,14 @@ set_console_color_rgb(void)
 {
 # ifdef FEAT_TERMGUICOLORS
     DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi;
-    int id;
-    guicolor_T fg = INVALCOLOR;
-    guicolor_T bg = INVALCOLOR;
-    int ctermfg;
-    int ctermbg;
+    guicolor_T	fg, bg;
+    int		ctermfg, ctermbg;
 
     if (!USE_VTP)
 	return;
 
-    id = syn_name2id((char_u *)"Normal");
-    if (id > 0 && p_tgc)
-	syn_id2colors(id, &fg, &bg);
-    if (fg == INVALCOLOR)
-    {
-	ctermfg = -1;
-	if (id > 0)
-	    syn_id2cterm_bg(id, &ctermfg, &ctermbg);
-	fg = ctermfg != -1 ? ctermtoxterm(ctermfg) : default_console_color_fg;
-	cterm_normal_fg_gui_color = fg;
-    }
-    if (bg == INVALCOLOR)
-    {
-	ctermbg = -1;
-	if (id > 0)
-	    syn_id2cterm_bg(id, &ctermfg, &ctermbg);
-	bg = ctermbg != -1 ? ctermtoxterm(ctermbg) : default_console_color_bg;
-	cterm_normal_bg_gui_color = bg;
-    }
+    get_default_console_color(&ctermfg, &ctermbg, &fg, &bg);
+
     fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
     bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
 
@@ -7459,6 +7439,51 @@ set_console_color_rgb(void)
 # endif
 }
 
+# if defined(FEAT_TERMGUICOLORS) || defined(PROTO)
+    void
+get_default_console_color(
+    int *cterm_fg,
+    int *cterm_bg,
+    guicolor_T *gui_fg,
+    guicolor_T *gui_bg)
+{
+    int id;
+    guicolor_T guifg = INVALCOLOR;
+    guicolor_T guibg = INVALCOLOR;
+    int ctermfg = 0;
+    int ctermbg = 0;
+
+    id = syn_name2id((char_u *)"Normal");
+    if (id > 0 && p_tgc)
+	syn_id2colors(id, &guifg, &guibg);
+    if (guifg == INVALCOLOR)
+    {
+	ctermfg = -1;
+	if (id > 0)
+	    syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+	guifg = ctermfg != -1 ? ctermtoxterm(ctermfg)
+						    : default_console_color_fg;
+	cterm_normal_fg_gui_color = guifg;
+	ctermfg = ctermfg < 0 ? 0 : ctermfg;
+    }
+    if (guibg == INVALCOLOR)
+    {
+	ctermbg = -1;
+	if (id > 0)
+	    syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+	guibg = ctermbg != -1 ? ctermtoxterm(ctermbg)
+						    : default_console_color_bg;
+	cterm_normal_bg_gui_color = guibg;
+	ctermbg = ctermbg < 0 ? 0 : ctermbg;
+    }
+
+    *cterm_fg = ctermfg;
+    *cterm_bg = ctermbg;
+    *gui_fg = guifg;
+    *gui_bg = guibg;
+}
+# endif
+
     static void
 reset_console_color_rgb(void)
 {