aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2024-07-26 03:04:17 +0200
committerGitHub <noreply@github.com>2024-07-26 09:04:17 +0800
commit5af9c065ada5600a076e24ca899da38b299c81e6 (patch)
tree7cb994689fb27ae3b166c349125f96303a84951b
parent41b70a0dea4ddced39e8475e2ed61a8bec729939 (diff)
downloadrneovim-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.c2
-rw-r--r--test/functional/ui/decorations_spec.lua22
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()