mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.1.0384: sign ordering #9758
Problem: Sign ordering depends on +netbeans feature.
Solution: Also order signs without +netbeans. (Christian Brabandt,
closes vim/vim#3224)
8aeb504fc6
This commit is contained in:
parent
6f7b81bd6d
commit
24d7513dc4
@ -5037,6 +5037,10 @@ static void insert_sign(
|
||||
newsign->lnum = lnum;
|
||||
newsign->typenr = typenr;
|
||||
newsign->next = next;
|
||||
newsign->prev = prev;
|
||||
if (next != NULL) {
|
||||
next->prev = newsign;
|
||||
}
|
||||
|
||||
if (prev == NULL) {
|
||||
/* When adding first sign need to redraw the windows to create the
|
||||
@ -5073,12 +5077,32 @@ void buf_addsign(
|
||||
sign->typenr = typenr;
|
||||
return;
|
||||
} else if ((lnum == sign->lnum && id != sign->id)
|
||||
|| (id < 0 && lnum < sign->lnum)) { // attempt to keep signs sorted by lnum
|
||||
|| (id < 0 && lnum < sign->lnum)) {
|
||||
// keep signs sorted by lnum: insert new sign at head of list for
|
||||
// this lnum
|
||||
while (prev != NULL && prev->lnum == lnum) {
|
||||
prev = prev->prev;
|
||||
}
|
||||
if (prev == NULL) {
|
||||
sign = buf->b_signlist;
|
||||
} else {
|
||||
sign = prev->next;
|
||||
}
|
||||
insert_sign(buf, prev, sign, id, lnum, typenr);
|
||||
return;
|
||||
}
|
||||
prev = sign;
|
||||
}
|
||||
|
||||
// insert new sign at head of list for this lnum
|
||||
while (prev != NULL && prev->lnum == lnum) {
|
||||
prev = prev->prev;
|
||||
}
|
||||
if (prev == NULL) {
|
||||
sign = buf->b_signlist;
|
||||
} else {
|
||||
sign = prev->next;
|
||||
}
|
||||
insert_sign(buf, prev, sign, id, lnum, typenr);
|
||||
|
||||
return;
|
||||
@ -5147,6 +5171,9 @@ linenr_T buf_delsign(
|
||||
next = sign->next;
|
||||
if (sign->id == id) {
|
||||
*lastp = next;
|
||||
if (next != NULL) {
|
||||
next->prev = sign->prev;
|
||||
}
|
||||
lnum = sign->lnum;
|
||||
xfree(sign);
|
||||
break;
|
||||
|
@ -13,6 +13,7 @@ struct signlist
|
||||
linenr_T lnum; // line number which has this sign
|
||||
int typenr; // typenr of sign
|
||||
signlist_T *next; // next signlist entry
|
||||
signlist_T *prev; // previous entry -- for easy reordering
|
||||
};
|
||||
|
||||
// type argument for buf_getsigntype() and sign_get_attr()
|
||||
|
Loading…
Reference in New Issue
Block a user