From fba17d5b882e2903ba7a40eabc6f557e3cf24658 Mon Sep 17 00:00:00 2001 From: bfredl Date: Wed, 22 Nov 2023 11:30:36 +0100 Subject: [PATCH] fix(decorations): fix imbalanced sign count --- src/nvim/decoration.c | 14 ++++++++++---- test/functional/ui/decorations_spec.lua | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index 91d5bfcc54..2ef689680d 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -179,11 +179,17 @@ DecorSignHighlight decor_sh_from_inline(DecorHighlightInline item, String concea void buf_put_decor(buf_T *buf, DecorInline decor, int row) { if (decor.ext) { - if (decor.data.ext.vt) { - buf_put_decor_virt(buf, decor.data.ext.vt); + DecorVirtText *vt = decor.data.ext.vt; + while (vt) { + buf_put_decor_virt(buf, vt); + vt = vt->next; } - if (decor.data.ext.sh_idx != DECOR_ID_INVALID) { - buf_put_decor_sh(buf, &kv_A(decor_items, decor.data.ext.sh_idx), row); + + uint32_t idx = decor.data.ext.sh_idx; + while (idx != DECOR_ID_INVALID) { + DecorSignHighlight *sh = &kv_A(decor_items, idx); + buf_put_decor_sh(buf, sh, row); + idx = sh->next; } } } diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 59a41a6de6..9853f05cf2 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -4628,6 +4628,27 @@ l5 end) + it('can add a single sign and text highlight', function() + insert(example_test3) + feed 'gg' + + meths.buf_set_extmark(0, ns, 1, 0, {sign_text='S', hl_group='Todo', end_col=1}) + screen:expect{grid=[[ + {1: }^l1 | + S {3:l}2 | + {1: }l3 | + {1: }l4 | + {1: }l5 | + {1: } | + {2:~ }| + {2:~ }| + {2:~ }| + | + ]]} + + meths.buf_clear_namespace(0, ns, 0, -1) + end) + it('can add multiple signs (single extmark)', function() insert(example_test3) feed 'gg'