]> granicus.if.org Git - vim/commitdiff
patch 8.2.0281: two placed signs in the same line are not combined v8.2.0281
authorBram Moolenaar <Bram@vim.org>
Wed, 19 Feb 2020 16:13:04 +0000 (17:13 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 19 Feb 2020 16:13:04 +0000 (17:13 +0100)
Problem:    Two placed signs in the same line are not combined.  E.g. in the
            terminal debugger a breakpoint and the PC cannot be both be
            displayed.
Solution:   Combine the sign column and line highlight attributes.

src/sign.c
src/testdir/dumps/Test_sign_cursor_3.dump
src/testdir/dumps/Test_sign_cursor_4.dump [new file with mode: 0644]
src/testdir/test_signs.vim
src/version.c

index 9d8d7ac8a371da136918b69f0e6207ccaa7b726b..1964c83087ba56b2e8fcaedb42f7ce74a8fa500e 100644 (file)
@@ -514,6 +514,30 @@ buf_get_signattrs(win_T *wp, linenr_T lnum, sign_attrs_T *sattr)
                sattr->sat_texthl = syn_id2attr(sp->sn_text_hl);
            if (sp->sn_line_hl > 0)
                sattr->sat_linehl = syn_id2attr(sp->sn_line_hl);
+
+           // If there is another sign next with the same priority, may
+           // combine the text and the line highlighting.
+           if (sign->se_next != NULL
+                   && sign->se_next->se_priority == sign->se_priority
+                   && sign->se_next->se_lnum == sign->se_lnum)
+           {
+               sign_T  *next_sp = find_sign_by_typenr(sign->se_next->se_typenr);
+
+               if (next_sp != NULL)
+               {
+                   if (sattr->sat_icon == NULL && sattr->sat_text == NULL)
+                   {
+# ifdef FEAT_SIGN_ICONS
+                       sattr->sat_icon = next_sp->sn_image;
+# endif
+                       sattr->sat_text = next_sp->sn_text;
+                   }
+                   if (sp->sn_text_hl <= 0 && next_sp->sn_text_hl > 0)
+                       sattr->sat_texthl = syn_id2attr(next_sp->sn_text_hl);
+                   if (sp->sn_line_hl <= 0 && next_sp->sn_line_hl > 0)
+                       sattr->sat_linehl = syn_id2attr(next_sp->sn_line_hl);
+               }
+           }
            return TRUE;
        }
     }
index 92643c3276a39404a2cbdc19a3ae3b2601e4ec88..88264e446362290c888d6aca2460f9841e95f158 100644 (file)
@@ -1,6 +1,6 @@
-|x+0&#ffffff0@74
->m@3| @70
-|y@3| @70
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @70
+|-+0&#ffff4012|)>m+0#0000001#ffd7ff255@3| @68
+| +0#0000e05#a8a8a8255@1|y+0#0000000#ffffff0@3| @68
 |~+0#4040ff13&| @73
-|~| @73
-|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e| |1|0| @40|2|,|1| @10|A|l@1| 
+|:+0#0000000&|s|i|g|n| |p|l|a|c|e| |1@1| |l|i|n|e|=|2| |n|a|m|e|=|s|2| @27|2|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_sign_cursor_4.dump b/src/testdir/dumps/Test_sign_cursor_4.dump
new file mode 100644 (file)
index 0000000..92643c3
--- /dev/null
@@ -0,0 +1,6 @@
+|x+0&#ffffff0@74
+>m@3| @70
+|y@3| @70
+|~+0#4040ff13&| @73
+|~| @73
+|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e| |1|0| @40|2|,|1| @10|A|l@1| 
index d480671d279c9f0775a3bc92eebfa888924d9591..ce122e8aaafaa9dc1c6407529e41bda6162be6f7 100644 (file)
@@ -1742,6 +1742,7 @@ func Test_sign_cursor_position()
        call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
        call cursor(2,1)
        sign define s1 texthl=Search text==>
+       sign define s2 linehl=Pmenu
        redraw
        sign place 10 line=2 name=s1
   END
@@ -1753,11 +1754,15 @@ func Test_sign_cursor_position()
   call term_sendkeys(buf, ":sign define s1 text=-)\<CR>")
   call VerifyScreenDump(buf, 'Test_sign_cursor_2', {})
 
+  " Also place a line HL sign
+  call term_sendkeys(buf, ":sign place 11 line=2 name=s2\<CR>")
+  call VerifyScreenDump(buf, 'Test_sign_cursor_3', {})
+
   " update cursor position calculation
   call term_sendkeys(buf, "lh")
+  call term_sendkeys(buf, ":sign unplace 11\<CR>")
   call term_sendkeys(buf, ":sign unplace 10\<CR>")
-  call VerifyScreenDump(buf, 'Test_sign_cursor_3', {})
-
+  call VerifyScreenDump(buf, 'Test_sign_cursor_4', {})
 
   " clean up
   call StopVimInTerminal(buf)
index 2ff3460757c5d009fb40fbb14b9f1dc39db9f444..d02cf9aaf97edaa5caaac3d108a97dfc3b27b920 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    281,
 /**/
     280,
 /**/