summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-05 17:05:04 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-05 17:05:04 +0100
commitf4ba8bc47eb3c6b5899ef31d083b9b8f0d4ca456 (patch)
tree9266118a1688defde92692244251530573f7da2b /src
parentafd2aa79eda3fe69f2e7c87d0b9b4bca874f386a (diff)
downloadvim-git-f4ba8bc47eb3c6b5899ef31d083b9b8f0d4ca456.tar.gz
patch 9.0.0144: text property cannot override 'cursorline' highlightv9.0.0144
Problem: Text property cannot override 'cursorline' highlight. Solution: Add the "override" flag to prop_type_add(). (closes #5533, closes #8225).
Diffstat (limited to 'src')
-rw-r--r--src/structs.h1
-rw-r--r--src/testdir/dumps/Test_textprop_hl_override_1.dump8
-rw-r--r--src/testdir/dumps/Test_textprop_hl_override_2.dump8
-rw-r--r--src/testdir/test_textprop.vim32
-rw-r--r--src/textprop.c14
-rw-r--r--src/version.c2
6 files changed, 63 insertions, 2 deletions
diff --git a/src/structs.h b/src/structs.h
index e6b9f0dbe..5b05c6487 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -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_END_INCL 2 // insert at end included in property
#define PT_FLAG_COMBINE 4 // combine with syntax highlight
+#define PT_FLAG_OVERRIDE 8 // override any highlight
// Sign group
typedef struct signgroup_S
diff --git a/src/testdir/dumps/Test_textprop_hl_override_1.dump b/src/testdir/dumps/Test_textprop_hl_override_1.dump
new file mode 100644
index 000000000..ce447e721
--- /dev/null
+++ b/src/testdir/dumps/Test_textprop_hl_override_1.dump
@@ -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|
diff --git a/src/testdir/dumps/Test_textprop_hl_override_2.dump b/src/testdir/dumps/Test_textprop_hl_override_2.dump
new file mode 100644
index 000000000..187233d12
--- /dev/null
+++ b/src/testdir/dumps/Test_textprop_hl_override_2.dump
@@ -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|
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 03af37ac3..4d41a15c5 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1133,6 +1133,38 @@ func Test_textprop_screenshot_various()
call delete('XtestProp')
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)
call writefile([
\ "call setline(1, ["
diff --git a/src/textprop.c b/src/textprop.c
index 9a9544c50..86b0dbf88 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -238,9 +238,10 @@ prop_add_one(
goto theend;
((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))
- if (*p == TAB)
+ if (*p < ' ')
*p = ' ';
text = NULL;
}
@@ -1542,6 +1543,15 @@ prop_type_set(typval_T *argvars, int add)
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);
if (di != NULL)
prop->pt_priority = tv_get_number(&di->di_tv);
diff --git a/src/version.c b/src/version.c
index e13e92cec..aa3af5ccd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 144,
+/**/
143,
/**/
142,