aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-11-22 12:19:30 +0100
committerGitHub <noreply@github.com>2023-11-22 12:19:30 +0100
commit34fa1e1ca4ddee0429f098a3ac885a716138fb6c (patch)
tree7e06eb69dc6829c0534533276a3326674298629f
parent2e722da44d3807698374043ecdd9952bd0772a40 (diff)
parentfba17d5b882e2903ba7a40eabc6f557e3cf24658 (diff)
downloadrneovim-34fa1e1ca4ddee0429f098a3ac885a716138fb6c.tar.gz
rneovim-34fa1e1ca4ddee0429f098a3ac885a716138fb6c.tar.bz2
rneovim-34fa1e1ca4ddee0429f098a3ac885a716138fb6c.zip
Merge pull request #26151 from bfredl/signcount
fix(decorations): fix imbalanced sign count
-rw-r--r--src/nvim/decoration.c14
-rw-r--r--test/functional/ui/decorations_spec.lua21
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'