]> granicus.if.org Git - vim/commitdiff
patch 9.0.0208: the override flag has no effect for virtual text v9.0.0208
authorBram Moolenaar <Bram@vim.org>
Sun, 14 Aug 2022 15:36:38 +0000 (16:36 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 14 Aug 2022 15:36:38 +0000 (16:36 +0100)
Problem:    The override flag has no effect for virtual text. (Ben Jackson)
Solution:   Make the override flag work. (closes #10915)

src/drawline.c
src/testdir/dumps/Test_prop_with_text_override_1.dump [new file with mode: 0644]
src/testdir/dumps/Test_prop_with_text_override_2.dump [new file with mode: 0644]
src/testdir/test_textprop.vim
src/version.c

index a129bae42057c9d446269afb31ec9c6dca7c1b62..19070228c2aaf3f96b2a83f6ba36b1029b6cdd9a 100644 (file)
@@ -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 (file)
index 0000000..50b8511
--- /dev/null
@@ -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 (file)
index 0000000..334929e
--- /dev/null
@@ -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| 
index 2e72db9b9baaf99d5fcd0e0744782293fdbe1b26..db17e79bdae92dfaaa44575686e82fed216da41d 100644 (file)
@@ -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
 
index 1ef5b39e97b5f0a553c8b835d1b07526df3773c8..00afb67e417d9f6b48547cfdf01ed2412ae1ad10 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    208,
 /**/
     207,
 /**/