Mercurial > vim
diff src/screen.c @ 13339:da2a9e217200 v8.0.1544
patch 8.0.1544: when using 'termguicolors' SpellBad doesn't show
commit https://github.com/vim/vim/commit/d4fc577e60d325777d38c00bd78fb9a32c7b1dfa
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Feb 27 14:39:03 2018 +0100
patch 8.0.1544: when using 'termguicolors' SpellBad doesn't show
Problem: When using 'termguicolors' SpellBad doesn't show.
Solution: When the GUI colors are not set fall back to the cterm colors.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 27 Feb 2018 14:45:06 +0100 |
parents | 65c3e8259124 |
children | 69517d67421f |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -8066,16 +8066,13 @@ screen_start_highlight(int attr) } if ((attr & HL_BOLD) && *T_MD != NUL) /* bold */ out_str(T_MD); - else if (aep != NULL && cterm_normal_fg_bold && + else if (aep != NULL && cterm_normal_fg_bold && ( #ifdef FEAT_TERMGUICOLORS - (p_tgc ? - (aep->ae_u.cterm.fg_rgb != INVALCOLOR): -#endif - (t_colors > 1 && aep->ae_u.cterm.fg_color) -#ifdef FEAT_TERMGUICOLORS - ) -#endif - ) + p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR + ? aep->ae_u.cterm.fg_rgb != INVALCOLOR + : +#endif + t_colors > 1 && aep->ae_u.cterm.fg_color)) /* If the Normal FG color has BOLD attribute and the new HL * has a FG color defined, clear BOLD. */ out_str(T_ME); @@ -8101,28 +8098,39 @@ screen_start_highlight(int attr) if (aep != NULL) { #ifdef FEAT_TERMGUICOLORS - if (p_tgc) + /* When 'termguicolors' is set but fg or bg is unset, + * fall back to the cterm colors. This helps for SpellBad, + * where the GUI uses a red undercurl. */ + if (p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR) { if (aep->ae_u.cterm.fg_rgb != INVALCOLOR) term_fg_rgb_color(aep->ae_u.cterm.fg_rgb); + } + else +#endif + if (t_colors > 1) + { + if (aep->ae_u.cterm.fg_color) + term_fg_color(aep->ae_u.cterm.fg_color - 1); + } +#ifdef FEAT_TERMGUICOLORS + if (p_tgc && aep->ae_u.cterm.bg_rgb != CTERMCOLOR) + { if (aep->ae_u.cterm.bg_rgb != INVALCOLOR) term_bg_rgb_color(aep->ae_u.cterm.bg_rgb); } else #endif - { - if (t_colors > 1) - { - if (aep->ae_u.cterm.fg_color) - term_fg_color(aep->ae_u.cterm.fg_color - 1); - if (aep->ae_u.cterm.bg_color) - term_bg_color(aep->ae_u.cterm.bg_color - 1); - } - else - { - if (aep->ae_u.term.start != NULL) - out_str(aep->ae_u.term.start); - } + if (t_colors > 1) + { + if (aep->ae_u.cterm.bg_color) + term_bg_color(aep->ae_u.cterm.bg_color - 1); + } + + if (t_colors <= 1) + { + if (aep->ae_u.term.start != NULL) + out_str(aep->ae_u.term.start); } } } @@ -8162,17 +8170,19 @@ screen_stop_highlight(void) * Assume that t_me restores the original colors! */ aep = syn_cterm_attr2entry(screen_attr); - if (aep != NULL && + if (aep != NULL && (( #ifdef FEAT_TERMGUICOLORS - (p_tgc ? - (aep->ae_u.cterm.fg_rgb != INVALCOLOR - || aep->ae_u.cterm.bg_rgb != INVALCOLOR): -#endif - (aep->ae_u.cterm.fg_color || aep->ae_u.cterm.bg_color) + p_tgc && aep->ae_u.cterm.fg_rgb != CTERMCOLOR + ? aep->ae_u.cterm.fg_rgb != INVALCOLOR + : +#endif + aep->ae_u.cterm.fg_color) || ( #ifdef FEAT_TERMGUICOLORS - ) -#endif - ) + p_tgc && aep->ae_u.cterm.bg_rgb != CTERMCOLOR + ? aep->ae_u.cterm.bg_rgb != INVALCOLOR + : +#endif + aep->ae_u.cterm.bg_color))) do_ME = TRUE; } else