aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/drawline.c3
-rw-r--r--test/functional/ui/decorations_spec.lua27
2 files changed, 29 insertions, 1 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index 43d9f67b5c..79cfc1ab2f 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -1163,7 +1163,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, b
}
}
- decor_providers_invoke_line(wp, lnum - 1);
+ decor_providers_invoke_line(wp, lnum - 1); // may invalidate wp->w_virtcol
+ validate_virtcol(wp);
has_decor = decor_redraw_line(wp, lnum - 1, &decor_state);
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 06bb5a14c9..307f750175 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -811,6 +811,33 @@ describe('decorations providers', function()
|
]])
end)
+
+ it('inline virt_text does not result in wrong cursor column #33153', function()
+ insert("line1 with a lot of text\nline2 with a lot of text")
+ setup_provider([[
+ _G.do_win = false
+ vim.keymap.set('n', 'f', function()
+ _G.do_win = true
+ vim.cmd('redraw!')
+ end)
+ vim.o.concealcursor = 'n'
+ function on_do(event)
+ if event == 'win' and _G.do_win then
+ vim.api.nvim_buf_set_extmark(0, ns1, 1, 0, {
+ virt_text = { { 'virt_text ' } },
+ virt_text_pos = 'inline'
+ })
+ end
+ end
+ ]])
+ feed('f')
+ screen:expect([[
+ line1 with a lot of text |
+ virt_text line2 with a lot of tex^t |
+ {1:~ }|*5
+ |
+ ]])
+ end)
end)
describe('decoration_providers', function()