diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2024-01-27 13:04:58 +0100 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2024-01-27 13:07:11 +0100 |
commit | b50fdcba4a1dadda5db7cfb527471b9956768ac2 (patch) | |
tree | 2f83ece969585d14979a8bfc9d06507d031aefc6 /test/functional/ui | |
parent | e35ae6fbc2ef47a7be1a787031072ba911f7e918 (diff) | |
download | rneovim-b50fdcba4a1dadda5db7cfb527471b9956768ac2.tar.gz rneovim-b50fdcba4a1dadda5db7cfb527471b9956768ac2.tar.bz2 rneovim-b50fdcba4a1dadda5db7cfb527471b9956768ac2.zip |
fix(column): clear "b_signcols" before moving saved marks
Problem: Marks moved by undo may be lost to "b_signcols.count".
Solution: Count signs for each undo object separately instead of
once for the entire undo.
Diffstat (limited to 'test/functional/ui')
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 7b3533454c..524a1351f3 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -5058,6 +5058,33 @@ l5 ]]} end) + it('correct width with moved marks before undo savepos', function() + screen:try_resize(20, 4) + insert(example_test3) + feed('gg') + exec_lua([[ + local ns = vim.api.nvim_create_namespace('') + vim.api.nvim_buf_set_extmark(0, ns, 0, 0, { sign_text = 'S1' }) + vim.api.nvim_buf_set_extmark(0, ns, 1, 0, { sign_text = 'S2' }) + local s3 = vim.api.nvim_buf_set_extmark(0, ns, 2, 0, { sign_text = 'S3' }) + local s4 = vim.api.nvim_buf_set_extmark(0, ns, 2, 0, { sign_text = 'S4' }) + vim.schedule(function() + vim.cmd('silent d3') + vim.api.nvim_buf_set_extmark(0, ns, 2, 0, { id = s3, sign_text = 'S3' }) + vim.api.nvim_buf_set_extmark(0, ns, 2, 0, { id = s4, sign_text = 'S4' }) + vim.cmd('silent undo') + vim.api.nvim_buf_del_extmark(0, ns, s3) + end) + ]]) + + screen:expect{grid=[[ + S1^l1 | + S2l2 | + S4l3 | + | + ]]} + end) + it('no crash with sign after many marks #27137', function() screen:try_resize(20, 4) insert('a') |