]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.0894: virtual text property highlight ignores window background v9.0.0894
authorBram Moolenaar <Bram@vim.org>
Thu, 17 Nov 2022 14:56:00 +0000 (14:56 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 17 Nov 2022 14:56:00 +0000 (14:56 +0000)
Problem:    Virtual text property highlight ignores window background.
Solution:   Combine text prop attribute with win_attr into extra_attr.
            (closes #11462)

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

index 90fbc2b1dac4b3aff3830ea61cb10bcdb056c292..137b888654d2cfbfd1f1a6454b648c59b9f45dd9 100644 (file)
@@ -130,7 +130,8 @@ typedef struct {
     char_u     *p_extra;       // string of extra chars, plus NUL, only used
                                // when c_extra and c_final are NUL
     char_u     *p_extra_free;  // p_extra buffer that needs to be freed
-    int                extra_attr;     // attributes for p_extra
+    int                extra_attr;     // attributes for p_extra, should be combined
+                               // with win_attr if needed
     int                c_extra;        // extra chars, all the same
     int                c_final;        // final char, mandatory if set
     int                extra_for_textprop; // wlv.n_extra set for textprop
@@ -1997,7 +1998,8 @@ win_line(
                            wlv.c_final = NUL;
                            wlv.n_extra = (int)STRLEN(p);
                            wlv.extra_for_textprop = TRUE;
-                           wlv.extra_attr = used_attr;
+                           wlv.extra_attr = hl_combine_attr(wlv.win_attr,
+                                                                   used_attr);
                            n_attr = mb_charlen(p);
                            // restore search_attr and area_attr when n_extra
                            // is down to zero
diff --git a/src/testdir/dumps/Test_virtual_text_in_popup_highlight_1.dump b/src/testdir/dumps/Test_virtual_text_in_popup_highlight_1.dump
new file mode 100644 (file)
index 0000000..b8c5b14
--- /dev/null
@@ -0,0 +1,8 @@
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @17| +0#0000001#ffd7ff255@16| +0#4040ff13#ffffff0@38
+|~| @17| +0#0000001#ffd7ff255| +0#0000e05&|+| |S+0#0000001&|o|m|e| | +0#4040ff13#afffff255|x| |t+0#0000001#ffd7ff255|e|x|t| | +0#4040ff13#ffffff0@38
+|~| @17| +0#0000001#ffd7ff255@16| +0#4040ff13#ffffff0@38
+|~| @73
+|~| @73
+| +0#0000000&@56|0|,|0|-|1| @8|A|l@1| 
index 1bd115b4e38cb56091e9305c32f1dcc337485c14..c03c5b3fb71362f132949e1c57d453abadffd4e0 100644 (file)
@@ -3422,6 +3422,50 @@ func Test_text_below_nowrap()
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_virtual_text_in_popup_highlight()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+      vim9script
+
+      # foreground highlight only, popup background is used
+      prop_type_add('Prop1', {'highlight': 'SpecialKey'})
+      # foreground and background highlight, popup background is not used
+      prop_type_add('Prop2', {'highlight': 'DiffDelete'})
+
+      var popupText = [{
+        text: 'Some text',
+        props: [
+                    {
+                      col: 1,
+                      type: 'Prop1',
+                      text: ' + '
+                    },
+                    {
+                      col: 6,
+                      type: 'Prop2',
+                      text: ' x '
+                    },
+                ]
+          }]
+      var popupArgs = {
+            line: 3,
+            col: 20,
+            maxwidth: 80,
+            highlight: 'PMenu',
+            border: [],
+            borderchars: [' '],
+          }
+
+      popup_create(popupText, popupArgs)
+  END
+  call writefile(lines, 'XscriptVirtualHighlight', 'D')
+  let buf = RunVimInTerminal('-S XscriptVirtualHighlight', #{rows: 8})
+  call VerifyScreenDump(buf, 'Test_virtual_text_in_popup_highlight_1', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 func Test_insert_text_change_arg()
   CheckRunVimInTerminal
 
index cfdd33a74ed3e439d4a071dfbb3a0b73392f001e..f4e9ee19544383bacec62ed3ac696ed5543cca73 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    894,
 /**/
     893,
 /**/