vim-patch:8.1.1466: not updating priority on existing sign

Problem:    Not updating priority on existing sign.
Solution:   Set the sign priority.  Add a test. (Yegappan Lakshmanan)
58a7f87c86
This commit is contained in:
Jan Edmund Lazo 2020-02-25 00:30:42 -05:00
parent ca3dba482c
commit 1caa85b677
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
4 changed files with 26 additions and 5 deletions

View File

@ -7818,7 +7818,7 @@ sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()*
priority sign priority priority sign priority
The returned signs in a buffer are ordered by their line The returned signs in a buffer are ordered by their line
number. number and priority.
Returns an empty list on failure or if there are no placed Returns an empty list on failure or if there are no placed
signs. signs.

View File

@ -176,9 +176,9 @@ See |sign_place()| for the equivalent Vim script function.
By default, the sign is assigned a default priority of 10. To By default, the sign is assigned a default priority of 10. To
assign a different priority value, use "priority={prio}" to assign a different priority value, use "priority={prio}" to
specify a value. The priority is used to determine the specify a value. The priority is used to determine the sign
highlight group used when multiple signs are placed on the that is displayed when multiple signs are placed on the same
same line. line.
Examples: > Examples: >
:sign place 5 line=3 name=sign1 file=a.py :sign place 5 line=3 name=sign1 file=a.py
@ -198,7 +198,9 @@ See |sign_place()| for the equivalent Vim script function.
it (e.g., when the debugger has stopped at a breakpoint). it (e.g., when the debugger has stopped at a breakpoint).
The optional "group={group}" attribute can be used before The optional "group={group}" attribute can be used before
"file=" to select a sign in a particular group. "file=" to select a sign in a particular group. The optional
"priority={prio}" attribute can be used to change the priority
of an existing sign.
:sign place {id} name={name} [buffer={nr}] :sign place {id} name={name} [buffer={nr}]
Same, but use buffer {nr}. If the buffer argument is not Same, but use buffer {nr}. If the buffer argument is not

View File

@ -284,6 +284,7 @@ void buf_addsign(
&& sign_in_group(sign, groupname)) { && sign_in_group(sign, groupname)) {
// Update an existing sign // Update an existing sign
sign->typenr = typenr; sign->typenr = typenr;
sign->priority = prio;
return; return;
} else if (lnum < sign->lnum) { } else if (lnum < sign->lnum) {
insert_sign_by_lnum_prio(buf, prev, id, groupname, prio, lnum, typenr); insert_sign_by_lnum_prio(buf, prev, id, groupname, prio, lnum, typenr);

View File

@ -1127,6 +1127,24 @@ func Test_sign_priority()
\ 'priority' : 10}], \ 'priority' : 10}],
\ s[0].signs) \ s[0].signs)
" Place multiple signs with same id on a line with different priority
call sign_place(1, '', 'sign1', 'Xsign',
\ {'lnum' : 5, 'priority' : 20})
call sign_place(1, '', 'sign2', 'Xsign',
\ {'lnum' : 5, 'priority' : 10})
let s = sign_getplaced('Xsign', {'lnum' : 5})
call assert_equal([
\ {'id' : 1, 'name' : 'sign2', 'lnum' : 5, 'group' : '',
\ 'priority' : 10}],
\ s[0].signs)
call sign_place(1, '', 'sign2', 'Xsign',
\ {'lnum' : 5, 'priority' : 5})
let s = sign_getplaced('Xsign', {'lnum' : 5})
call assert_equal([
\ {'id' : 1, 'name' : 'sign2', 'lnum' : 5, 'group' : '',
\ 'priority' : 5}],
\ s[0].signs)
" Error case " Error case
call assert_fails("call sign_place(1, 'g1', 'sign1', 'Xsign', call assert_fails("call sign_place(1, 'g1', 'sign1', 'Xsign',
\ [])", 'E715:') \ [])", 'E715:')