From a2f6e42ded067df8ee682c15aa246491a389b1a0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 19 Feb 2020 17:13:04 +0100 Subject: patch 8.2.0281: two placed signs in the same line are not combined 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 | 24 ++++++++++++++++++++++++ src/testdir/dumps/Test_sign_cursor_3.dump | 10 +++++----- src/testdir/dumps/Test_sign_cursor_4.dump | 6 ++++++ src/testdir/test_signs.vim | 9 +++++++-- src/version.c | 2 ++ 5 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 src/testdir/dumps/Test_sign_cursor_4.dump 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=-)\") call VerifyScreenDump(buf, 'Test_sign_cursor_2', {}) + " Also place a line HL sign + call term_sendkeys(buf, ":sign place 11 line=2 name=s2\") + call VerifyScreenDump(buf, 'Test_sign_cursor_3', {}) + " update cursor position calculation call term_sendkeys(buf, "lh") + call term_sendkeys(buf, ":sign unplace 11\") call term_sendkeys(buf, ":sign unplace 10\") - 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 @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 281, /**/ 280, /**/ -- cgit v1.2.3