forked from aniani/vim
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.
This commit is contained in:
24
src/sign.c
24
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;
|
||||
}
|
||||
}
|
||||
|
@@ -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|
|
||||
|
6
src/testdir/dumps/Test_sign_cursor_4.dump
Normal file
6
src/testdir/dumps/Test_sign_cursor_4.dump
Normal file
@@ -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|
|
@@ -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', {})
|
||||
|
||||
" update cursor position calculation
|
||||
call term_sendkeys(buf, "lh")
|
||||
call term_sendkeys(buf, ":sign unplace 10\<CR>")
|
||||
" 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_4', {})
|
||||
|
||||
" clean up
|
||||
call StopVimInTerminal(buf)
|
||||
|
@@ -738,6 +738,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
281,
|
||||
/**/
|
||||
280,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user