0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.0.0914: highlight attributes are always combined

Problem:    Highlight attributes are always combined.
Solution:   Add the 'nocombine' value to replace attributes instead of
            combining them. (scauligi, closes #1963)
This commit is contained in:
Bram Moolenaar
2017-08-12 15:12:30 +02:00
parent 9698ad7201
commit 0cd2a94a40
4 changed files with 18 additions and 10 deletions

View File

@@ -4689,6 +4689,7 @@ the same syntax file on all terminals, and use the optimal highlighting.
*bold* *underline* *undercurl*
*inverse* *italic* *standout*
*nocombine*
term={attr-list} *attr-list* *highlight-term* *E418*
attr-list is a comma separated list (without spaces) of the
following items (in any order):
@@ -4699,6 +4700,7 @@ term={attr-list} *attr-list* *highlight-term* *E418*
inverse same as reverse
italic
standout
nocombine override attributes instead of combining them
NONE no attributes used (used to reset it)
Note that "bold" can be used here and by using a bold font. They

View File

@@ -86,9 +86,10 @@ static int include_link = 0; /* when 2 include "link" and "clear" */
*/
static char *(hl_name_table[]) =
{"bold", "standout", "underline", "undercurl",
"italic", "reverse", "inverse", "NONE"};
"italic", "reverse", "inverse", "nocombine", "NONE"};
static int hl_attr_table[] =
{HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, 0};
{HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, 0};
#define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
static int get_attr_entry(garray_T *table, attrentry_T *aep);
static void syn_unadd_group(void);
@@ -8912,7 +8913,7 @@ hl_combine_attr(int char_attr, int prim_attr)
if (char_attr == 0)
return prim_attr;
if (char_attr <= HL_ALL && prim_attr <= HL_ALL)
return char_attr | prim_attr;
return ATTR_COMBINE(char_attr, prim_attr);
#ifdef FEAT_GUI
if (gui.in_use)
{
@@ -8931,13 +8932,14 @@ hl_combine_attr(int char_attr, int prim_attr)
}
if (prim_attr <= HL_ALL)
new_en.ae_attr |= prim_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
else
{
spell_aep = syn_gui_attr2entry(prim_attr);
if (spell_aep != NULL)
{
new_en.ae_attr |= spell_aep->ae_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
spell_aep->ae_attr);
if (spell_aep->ae_u.gui.fg_color != INVALCOLOR)
new_en.ae_u.gui.fg_color = spell_aep->ae_u.gui.fg_color;
if (spell_aep->ae_u.gui.bg_color != INVALCOLOR)
@@ -8974,13 +8976,14 @@ hl_combine_attr(int char_attr, int prim_attr)
}
if (prim_attr <= HL_ALL)
new_en.ae_attr |= prim_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
else
{
spell_aep = syn_cterm_attr2entry(prim_attr);
if (spell_aep != NULL)
{
new_en.ae_attr |= spell_aep->ae_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr,
spell_aep->ae_attr);
if (spell_aep->ae_u.cterm.fg_color > 0)
new_en.ae_u.cterm.fg_color = spell_aep->ae_u.cterm.fg_color;
if (spell_aep->ae_u.cterm.bg_color > 0)
@@ -9008,13 +9011,13 @@ hl_combine_attr(int char_attr, int prim_attr)
}
if (prim_attr <= HL_ALL)
new_en.ae_attr |= prim_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, prim_attr);
else
{
spell_aep = syn_term_attr2entry(prim_attr);
if (spell_aep != NULL)
{
new_en.ae_attr |= spell_aep->ae_attr;
new_en.ae_attr = ATTR_COMBINE(new_en.ae_attr, spell_aep->ae_attr);
if (spell_aep->ae_u.term.start != NULL)
{
new_en.ae_u.term.start = spell_aep->ae_u.term.start;

View File

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

View File

@@ -680,7 +680,8 @@ extern int (*dyn_libintl_putenv)(const char *envstring);
#define HL_UNDERLINE 0x08
#define HL_UNDERCURL 0x10
#define HL_STANDOUT 0x20
#define HL_ALL 0x3f
#define HL_NOCOMBINE 0x40
#define HL_ALL 0x7f
/* special attribute addition: Put message in history */
#define MSG_HIST 0x1000