mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.0144: text property cannot override 'cursorline' highlight
Problem: Text property cannot override 'cursorline' highlight. Solution: Add the "override" flag to prop_type_add(). (closes #5533, closes #8225).
This commit is contained in:
@@ -377,6 +377,8 @@ prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970*
|
|||||||
combine when omitted or TRUE combine the highlight
|
combine when omitted or TRUE combine the highlight
|
||||||
with any syntax highlight; when FALSE syntax
|
with any syntax highlight; when FALSE syntax
|
||||||
highlight will not be used
|
highlight will not be used
|
||||||
|
override when TRUE the highlight overrides any other,
|
||||||
|
including 'cursorline' and Visual
|
||||||
start_incl when TRUE inserts at the start position will
|
start_incl when TRUE inserts at the start position will
|
||||||
be included in the text property
|
be included in the text property
|
||||||
end_incl when TRUE inserts at the end position will be
|
end_incl when TRUE inserts at the end position will be
|
||||||
|
@@ -834,6 +834,7 @@ typedef struct proptype_S
|
|||||||
#define PT_FLAG_INS_START_INCL 1 // insert at start included in property
|
#define PT_FLAG_INS_START_INCL 1 // insert at start included in property
|
||||||
#define PT_FLAG_INS_END_INCL 2 // insert at end included in property
|
#define PT_FLAG_INS_END_INCL 2 // insert at end included in property
|
||||||
#define PT_FLAG_COMBINE 4 // combine with syntax highlight
|
#define PT_FLAG_COMBINE 4 // combine with syntax highlight
|
||||||
|
#define PT_FLAG_OVERRIDE 8 // override any highlight
|
||||||
|
|
||||||
// Sign group
|
// Sign group
|
||||||
typedef struct signgroup_S
|
typedef struct signgroup_S
|
||||||
|
8
src/testdir/dumps/Test_textprop_hl_override_1.dump
Normal file
8
src/testdir/dumps/Test_textprop_hl_override_1.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|O+0&#ffffff0|n|e| |o+0#4040ff13#ffff4012|n|e| |o+0#0000000#ffffff0|n|e| |o+0#4040ff13#ffff4012|n|e| |o+0#0000000#ffffff0|n|e| @55
|
||||||
|
>T+10#ff404010#40ff4011|w|o| |t|w|o| |t|w|o| |t+10#4040ff13#ffff4012|w|o| |t+10#ff404010#40ff4011|w|o| @55
|
||||||
|
|T+0#0000000#ffffff0|h|r|e|e+0#4040ff13#ffff4012| |t|h|r+0#0000000#ffffff0|e@1| |t+0#4040ff13#ffff4012|h|r|e|e+0#0000000#ffffff0| |t|h|r|e@1| @51
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|2|,|1| @10|A|l@1|
|
8
src/testdir/dumps/Test_textprop_hl_override_2.dump
Normal file
8
src/testdir/dumps/Test_textprop_hl_override_2.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|O+0&#ffffff0|n|e| |o+0#4040ff13#ffff4012|n|e| |o+0#0000000#ffffff0|n|e| |o+0#4040ff13#ffff4012|n|e| |o+0#0000000#ffffff0|n|e| @55
|
||||||
|
|T|w|o| |t+0#4040ff13#ffff4012|w|o| |t+0#0000000#ffffff0|w|o| |t+0#4040ff13#ffff4012|w|o| |t+0#0000000#ffffff0|w|o| @55
|
||||||
|
|T|h|r+0&#e0e0e08|e|e+0#4040ff13&| |t|h|r+0#0000000&|e@1| |t+0#4040ff13#ffff4012|h|r|e|e+0#0000000#e0e0e08| |t|h|r>e+0&#ffffff0@1| @51
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@34|2|0| @7|3|,|2@1| @9|A|l@1|
|
@@ -1133,6 +1133,38 @@ func Test_textprop_screenshot_various()
|
|||||||
call delete('XtestProp')
|
call delete('XtestProp')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_textprop_hl_override()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
call setline(1, ['One one one one one', 'Two two two two two', 'Three three three three'])
|
||||||
|
hi OverProp ctermfg=blue ctermbg=yellow
|
||||||
|
hi CursorLine cterm=bold,underline ctermfg=red ctermbg=green
|
||||||
|
hi Vsual ctermfg=cyan ctermbg=grey
|
||||||
|
call prop_type_add('under', #{highlight: 'OverProp'})
|
||||||
|
call prop_type_add('over', #{highlight: 'OverProp', override: 1})
|
||||||
|
call prop_add(1, 5, #{type: 'under', length: 4})
|
||||||
|
call prop_add(1, 13, #{type: 'over', length: 4})
|
||||||
|
call prop_add(2, 5, #{type: 'under', length: 4})
|
||||||
|
call prop_add(2, 13, #{type: 'over', length: 4})
|
||||||
|
call prop_add(3, 5, #{type: 'under', length: 4})
|
||||||
|
call prop_add(3, 13, #{type: 'over', length: 4})
|
||||||
|
set cursorline
|
||||||
|
2
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XtestOverProp')
|
||||||
|
let buf = RunVimInTerminal('-S XtestOverProp', {'rows': 8})
|
||||||
|
call VerifyScreenDump(buf, 'Test_textprop_hl_override_1', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "3Gllv$hh")
|
||||||
|
call VerifyScreenDump(buf, 'Test_textprop_hl_override_2', {})
|
||||||
|
call term_sendkeys(buf, "\<Esc>")
|
||||||
|
|
||||||
|
" clean up
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XtestOverProp')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func RunTestVisualBlock(width, dump)
|
func RunTestVisualBlock(width, dump)
|
||||||
call writefile([
|
call writefile([
|
||||||
\ "call setline(1, ["
|
\ "call setline(1, ["
|
||||||
|
@@ -238,9 +238,10 @@ prop_add_one(
|
|||||||
goto theend;
|
goto theend;
|
||||||
((char_u **)gap->ga_data)[gap->ga_len++] = text;
|
((char_u **)gap->ga_data)[gap->ga_len++] = text;
|
||||||
|
|
||||||
// change any Tab to a Space to make it simpler to compute the size
|
// change any control character (Tab, Newline, etc.) to a Space to make
|
||||||
|
// it simpler to compute the size
|
||||||
for (p = text; *p != NUL; MB_PTR_ADV(p))
|
for (p = text; *p != NUL; MB_PTR_ADV(p))
|
||||||
if (*p == TAB)
|
if (*p < ' ')
|
||||||
*p = ' ';
|
*p = ' ';
|
||||||
text = NULL;
|
text = NULL;
|
||||||
}
|
}
|
||||||
@@ -1542,6 +1543,15 @@ prop_type_set(typval_T *argvars, int add)
|
|||||||
prop->pt_flags &= ~PT_FLAG_COMBINE;
|
prop->pt_flags &= ~PT_FLAG_COMBINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
di = dict_find(dict, (char_u *)"override", -1);
|
||||||
|
if (di != NULL)
|
||||||
|
{
|
||||||
|
if (tv_get_bool(&di->di_tv))
|
||||||
|
prop->pt_flags |= PT_FLAG_OVERRIDE;
|
||||||
|
else
|
||||||
|
prop->pt_flags &= ~PT_FLAG_OVERRIDE;
|
||||||
|
}
|
||||||
|
|
||||||
di = dict_find(dict, (char_u *)"priority", -1);
|
di = dict_find(dict, (char_u *)"priority", -1);
|
||||||
if (di != NULL)
|
if (di != NULL)
|
||||||
prop->pt_priority = tv_get_number(&di->di_tv);
|
prop->pt_priority = tv_get_number(&di->di_tv);
|
||||||
|
@@ -735,6 +735,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 */
|
||||||
|
/**/
|
||||||
|
144,
|
||||||
/**/
|
/**/
|
||||||
143,
|
143,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user