mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 06:28:35 +00:00
feat(signs)!: place higher-priority signs from the left #27781
Problem: Higher-priority signs may be hidden by lower-priority signs. Solution: Place higher-priority signs from the left. Example: nvim_buf_set_extmark(0, ns, 0, -1, {sign_text='H', priority=1}) nvim_buf_set_extmark(0, ns, 0, -1, {sign_text='W', priority=2}) nvim_buf_set_extmark(0, ns, 0, -1, {sign_text='E', priority=3}) Before: | | H | W E | ^ | | Not visible After: | | | E W | H | | ^ Not visible Fixes #16632
This commit is contained in:
@@ -740,14 +740,15 @@ void decor_redraw_signs(win_T *wp, buf_T *buf, int row, SignTextAttrs sattrs[],
|
||||
|
||||
if (kv_size(signs)) {
|
||||
int width = wp->w_minscwidth == SCL_NUM ? 1 : wp->w_scwidth;
|
||||
int idx = MIN(width, num_text) - 1;
|
||||
int len = MIN(width, num_text);
|
||||
int idx = 0;
|
||||
qsort((void *)&kv_A(signs, 0), kv_size(signs), sizeof(kv_A(signs, 0)), sign_item_cmp);
|
||||
|
||||
for (size_t i = 0; i < kv_size(signs); i++) {
|
||||
DecorSignHighlight *sh = kv_A(signs, i).sh;
|
||||
if (idx >= 0 && sh->text[0]) {
|
||||
if (idx < len && sh->text[0]) {
|
||||
memcpy(sattrs[idx].text, sh->text, SIGN_WIDTH * sizeof(sattr_T));
|
||||
sattrs[idx--].hl_id = sh->hl_id;
|
||||
sattrs[idx++].hl_id = sh->hl_id;
|
||||
}
|
||||
if (*num_id == 0) {
|
||||
*num_id = sh->number_hl_id;
|
||||
|
Reference in New Issue
Block a user