1
0
forked from aniani/vim

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 #5303)
This commit is contained in:
Bram Moolenaar
2019-12-02 21:35:31 +01:00
parent 54c8d229f5
commit a050b9471c
4 changed files with 79 additions and 24 deletions

View File

@@ -7414,34 +7414,14 @@ set_console_color_rgb(void)
{ {
# ifdef FEAT_TERMGUICOLORS # ifdef FEAT_TERMGUICOLORS
DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi; DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi;
int id; guicolor_T fg, bg;
guicolor_T fg = INVALCOLOR; int ctermfg, ctermbg;
guicolor_T bg = INVALCOLOR;
int ctermfg;
int ctermbg;
if (!USE_VTP) if (!USE_VTP)
return; return;
id = syn_name2id((char_u *)"Normal"); get_default_console_color(&ctermfg, &ctermbg, &fg, &bg);
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;
}
fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg); fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg); bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
@@ -7459,6 +7439,51 @@ set_console_color_rgb(void)
# endif # 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 static void
reset_console_color_rgb(void) reset_console_color_rgb(void)
{ {

View File

@@ -71,6 +71,7 @@ void used_file_arg(char *name, int literal, int full_path, int diff_mode);
void set_alist_count(void); void set_alist_count(void);
void fix_arg_enc(void); void fix_arg_enc(void);
int mch_setenv(char *var, char *value, int x); int mch_setenv(char *var, char *value, int x);
void get_default_console_color(int *cterm_fg, int *cterm_bg, guicolor_T *gui_fg, guicolor_T *gui_bg);
void control_console_color_rgb(void); void control_console_color_rgb(void);
int use_vtp(void); int use_vtp(void);
int is_term_win32(void); int is_term_win32(void);

View File

@@ -1777,6 +1777,33 @@ screen_start_highlight(int attr)
else else
attr = aep->ae_attr; attr = aep->ae_attr;
} }
#if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
if (use_vtp())
{
guicolor_T defguifg, defguibg;
int defctermfg, defctermbg;
// If FG and BG are unset, the color is undefined when
// BOLD+INVERSE. Use Normal as the default value.
get_default_console_color(&defctermfg, &defctermbg, &defguifg,
&defguibg);
if (p_tgc)
{
if (aep == NULL || COLOR_INVALID(aep->ae_u.cterm.fg_rgb))
term_fg_rgb_color(defguifg);
if (aep == NULL || COLOR_INVALID(aep->ae_u.cterm.bg_rgb))
term_bg_rgb_color(defguibg);
}
else if (t_colors >= 256)
{
if (aep == NULL || aep->ae_u.cterm.fg_color == 0)
term_fg_color(defctermfg);
if (aep == NULL || aep->ae_u.cterm.bg_color == 0)
term_bg_color(defctermbg);
}
}
#endif
if ((attr & HL_BOLD) && *T_MD != NUL) /* bold */ if ((attr & HL_BOLD) && *T_MD != NUL) /* bold */
out_str(T_MD); out_str(T_MD);
else if (aep != NULL && cterm_normal_fg_bold && ( else if (aep != NULL && cterm_normal_fg_bold && (

View File

@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2382,
/**/ /**/
2381, 2381,
/**/ /**/