summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-14 16:36:38 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-14 16:36:38 +0100
commit9e7e28fc4c32337f2153b94fb08140f47e46e35d (patch)
tree04da7aebe5211c82361dd7455ca34968332dd8cd
parent28c162f6f1f525882a9a60f10ab4836dee7eb59f (diff)
patch 9.0.0208: the override flag has no effect for virtual textv9.0.0208
Problem: The override flag has no effect for virtual text. (Ben Jackson) Solution: Make the override flag work. (closes #10915)
-rw-r--r--src/drawline.c19
-rw-r--r--src/testdir/dumps/Test_prop_with_text_override_1.dump6
-rw-r--r--src/testdir/dumps/Test_prop_with_text_override_2.dump6
-rw-r--r--src/testdir/test_textprop.vim24
-rw-r--r--src/version.c2
5 files changed, 51 insertions, 6 deletions
diff --git a/src/drawline.c b/src/drawline.c
index a129bae420..19070228c2 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -554,6 +554,7 @@ win_line(
int *text_prop_idxs = NULL;
int text_props_active = 0;
proptype_T *text_prop_type = NULL;
+ int extra_for_textprop = FALSE; // wlv.n_extra set for textprop
int text_prop_attr = 0;
int text_prop_id = 0; // active property ID
int text_prop_flags = 0;
@@ -1645,10 +1646,13 @@ win_line(
++text_prop_next;
}
- text_prop_attr = 0;
- text_prop_flags = 0;
- text_prop_type = NULL;
- text_prop_id = 0;
+ if (wlv.n_extra == 0 || !extra_for_textprop)
+ {
+ text_prop_attr = 0;
+ text_prop_flags = 0;
+ text_prop_type = NULL;
+ text_prop_id = 0;
+ }
if (text_props_active > 0 && wlv.n_extra == 0)
{
int used_tpi = -1;
@@ -1709,6 +1713,7 @@ win_line(
wlv.c_extra = NUL;
wlv.c_final = NUL;
wlv.n_extra = (int)STRLEN(p);
+ extra_for_textprop = TRUE;
extra_attr = used_attr;
n_attr = mb_charlen(p);
saved_search_attr = search_attr;
@@ -2094,6 +2099,7 @@ win_line(
#if defined(FEAT_PROP_POPUP)
if (wlv.n_extra <= 0)
{
+ extra_for_textprop = FALSE;
in_linebreak = FALSE;
if (search_attr == 0)
search_attr = saved_search_attr;
@@ -2982,11 +2988,12 @@ win_line(
}
#endif
- // Use "extra_attr", but don't override visual selection highlighting.
+ // Use "extra_attr", but don't override visual selection highlighting,
+ // unless text property overrides.
// Don't use "extra_attr" until n_attr_skip is zero.
if (n_attr_skip == 0 && n_attr > 0
&& wlv.draw_state == WL_LINE
- && !attr_pri)
+ && (!attr_pri || (text_prop_flags & PT_FLAG_OVERRIDE)))
{
#ifdef LINE_ATTR
if (line_attr)
diff --git a/src/testdir/dumps/Test_prop_with_text_override_1.dump b/src/testdir/dumps/Test_prop_with_text_override_1.dump
new file mode 100644
index 0000000000..50b8511861
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_with_text_override_1.dump
@@ -0,0 +1,6 @@
+>s+8&#e0e0e08|o|m|e| | +8#4040ff13#40ffff15|i|n|s|e|r|t|e|d| |t+8#0000000#e0e0e08|e|x|t| |h|e|r|e| @35
+|~+0#4040ff13#ffffff0| @58
+|~| @58
+|~| @58
+|~| @58
+| +0#0000000&@41|1|,|1| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_with_text_override_2.dump b/src/testdir/dumps/Test_prop_with_text_override_2.dump
new file mode 100644
index 0000000000..334929e112
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_with_text_override_2.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m+0&#e0e0e08|e| | +0#4040ff13#40ffff15|i|n|s|e|r|t|e|d| |t+0#0000000#e0e0e08|e|x|t| |h|e>r+0&#ffffff0|e| @35
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|~| @58
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@19|1@1| @7|1|,|1|3|-|2|3| @6|A|l@1|
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 2e72db9b9b..db17e79bda 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2805,6 +2805,30 @@ func Test_props_with_text_below_nowrap()
call delete('XscriptPropsBelowNowrap')
endfunc
+func Test_props_with_text_override()
+ CheckRunVimInTerminal
+
+ let lines =<< trim END
+ vim9script
+ setline(1, 'some text here')
+ hi Likethis ctermfg=blue ctermbg=cyan
+ prop_type_add('prop', {highlight: 'Likethis', override: true})
+ prop_add(1, 6, {type: 'prop', text: ' inserted '})
+ hi CursorLine cterm=underline ctermbg=lightgrey
+ set cursorline
+ END
+ call writefile(lines, 'XscriptPropsOverride')
+ let buf = RunVimInTerminal('-S XscriptPropsOverride', #{rows: 6, cols: 60})
+ call VerifyScreenDump(buf, 'Test_prop_with_text_override_1', {})
+
+ call term_sendkeys(buf, ":set nocursorline\<CR>")
+ call term_sendkeys(buf, "0llvfr")
+ call VerifyScreenDump(buf, 'Test_prop_with_text_override_2', {})
+
+ call StopVimInTerminal(buf)
+ call delete('XscriptPropsOverride')
+endfunc
+
func Test_props_with_text_CursorMoved()
CheckRunVimInTerminal
diff --git a/src/version.c b/src/version.c
index 1ef5b39e97..00afb67e41 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 */
/**/
+ 208,
+/**/
207,
/**/
206,