summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-19 17:13:04 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-19 17:13:04 +0100
commita2f6e42ded067df8ee682c15aa246491a389b1a0 (patch)
tree8eef72d8edf62e4f179d6408167ddc7d73d0f5b1
parent257cc5ee9593cd0653beca8b5945dc7fbf7f2d8d (diff)
patch 8.2.0281: two placed signs in the same line are not combinedv8.2.0281
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.
-rw-r--r--src/sign.c24
-rw-r--r--src/testdir/dumps/Test_sign_cursor_3.dump10
-rw-r--r--src/testdir/dumps/Test_sign_cursor_4.dump6
-rw-r--r--src/testdir/test_signs.vim9
-rw-r--r--src/version.c2
5 files changed, 44 insertions, 7 deletions
diff --git a/src/sign.c b/src/sign.c
index 9d8d7ac8a3..1964c83087 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -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;
}
}
diff --git a/src/testdir/dumps/Test_sign_cursor_3.dump b/src/testdir/dumps/Test_sign_cursor_3.dump
index 92643c3276..88264e4463 100644
--- a/src/testdir/dumps/Test_sign_cursor_3.dump
+++ b/src/testdir/dumps/Test_sign_cursor_3.dump
@@ -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
index 0000000000..92643c3276
--- /dev/null
+++ b/src/testdir/dumps/Test_sign_cursor_4.dump
@@ -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|
diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim
index d480671d27..ce122e8aaa 100644
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -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)
diff --git a/src/version.c b/src/version.c
index 2ff3460757..d02cf9aaf9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 281,
+/**/
280,
/**/
279,