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->lnum = lnum;
|
||||||
newsign->typenr = typenr;
|
newsign->typenr = typenr;
|
||||||
newsign->next = next;
|
newsign->next = next;
|
||||||
|
newsign->prev = prev;
|
||||||
|
if (next != NULL) {
|
||||||
|
next->prev = newsign;
|
||||||
|
}
|
||||||
|
|
||||||
if (prev == NULL) {
|
if (prev == NULL) {
|
||||||
/* When adding first sign need to redraw the windows to create the
|
/* When adding first sign need to redraw the windows to create the
|
||||||
@ -5073,12 +5077,32 @@ void buf_addsign(
|
|||||||
sign->typenr = typenr;
|
sign->typenr = typenr;
|
||||||
return;
|
return;
|
||||||
} else if ((lnum == sign->lnum && id != sign->id)
|
} 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)) {
|
||||||
insert_sign(buf, prev, sign, id, lnum, typenr);
|
// keep signs sorted by lnum: insert new sign at head of list for
|
||||||
return;
|
// 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;
|
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);
|
insert_sign(buf, prev, sign, id, lnum, typenr);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -5147,6 +5171,9 @@ linenr_T buf_delsign(
|
|||||||
next = sign->next;
|
next = sign->next;
|
||||||
if (sign->id == id) {
|
if (sign->id == id) {
|
||||||
*lastp = next;
|
*lastp = next;
|
||||||
|
if (next != NULL) {
|
||||||
|
next->prev = sign->prev;
|
||||||
|
}
|
||||||
lnum = sign->lnum;
|
lnum = sign->lnum;
|
||||||
xfree(sign);
|
xfree(sign);
|
||||||
break;
|
break;
|
||||||
|
@ -13,6 +13,7 @@ struct signlist
|
|||||||
linenr_T lnum; // line number which has this sign
|
linenr_T lnum; // line number which has this sign
|
||||||
int typenr; // typenr of sign
|
int typenr; // typenr of sign
|
||||||
signlist_T *next; // next signlist entry
|
signlist_T *next; // next signlist entry
|
||||||
|
signlist_T *prev; // previous entry -- for easy reordering
|
||||||
};
|
};
|
||||||
|
|
||||||
// type argument for buf_getsigntype() and sign_get_attr()
|
// type argument for buf_getsigntype() and sign_get_attr()
|
||||||
|
Loading…
Reference in New Issue
Block a user