diff options
author | luukvbaal <luukvbaal@gmail.com> | 2024-07-26 03:04:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-26 09:04:17 +0800 |
commit | 5af9c065ada5600a076e24ca899da38b299c81e6 (patch) | |
tree | 7cb994689fb27ae3b166c349125f96303a84951b | |
parent | 41b70a0dea4ddced39e8475e2ed61a8bec729939 (diff) | |
download | rneovim-5af9c065ada5600a076e24ca899da38b299c81e6.tar.gz rneovim-5af9c065ada5600a076e24ca899da38b299c81e6.tar.bz2 rneovim-5af9c065ada5600a076e24ca899da38b299c81e6.zip |
fix(decor): don't draw invalidated virtual lines (#29858)
-rw-r--r-- | src/nvim/decoration.c | 2 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index cdb78e9eb5..97801b3567 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -924,7 +924,7 @@ int decor_virt_lines(win_T *wp, linenr_T lnum, VirtLines *lines, TriState has_fo while (true) { MTKey mark = marktree_itr_current(itr); DecorVirtText *vt = mt_decor_virt(mark); - if (ns_in_win(mark.ns, wp)) { + if (!mt_invalid(mark) && ns_in_win(mark.ns, wp)) { while (vt) { if (vt->flags & kVTIsLines) { bool above = vt->flags & kVTLinesAbove; diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index eda95b8991..c86b68994d 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -4948,6 +4948,28 @@ if (h->n_buckets < new_n_buckets) { // expand | ]]) end) + + it('not drawn when invalid', function() + api.nvim_buf_set_lines(0, 0, -1, false, { 'foo', 'bar' }) + api.nvim_buf_set_extmark(0, ns, 0, 0, { virt_lines = {{{'VIRT1'}}}, invalidate = true }) + screen:expect({ + grid = [[ + ^foo | + VIRT1 | + bar | + {1:~ }|*8 + | + ]] + }) + feed('dd') + screen:expect({ + grid = [[ + ^bar | + {1:~ }|*10 + | + ]] + }) + end) end) describe('decorations: signs', function() |