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:
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
|
27
src/screen.c
27
src/screen.c
@@ -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 && (
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user