aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-10-03 20:54:42 +0800
committerGitHub <noreply@github.com>2023-10-03 20:54:42 +0800
commitb2a8a9314798e18c0685faf7463bda32f691d755 (patch)
treebb90d717d9c03fbd87e487101c3d1e7d578b2fc9
parent08aea256c8330f482319b0579944a56707cc5bbe (diff)
downloadrneovim-b2a8a9314798e18c0685faf7463bda32f691d755.tar.gz
rneovim-b2a8a9314798e18c0685faf7463bda32f691d755.tar.bz2
rneovim-b2a8a9314798e18c0685faf7463bda32f691d755.zip
fix(api): avoid immediate TextChanged with nvim_create_buf (#25492)
-rw-r--r--src/nvim/api/vim.c6
-rw-r--r--test/functional/api/vim_spec.lua12
2 files changed, 18 insertions, 0 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 675aaf1006..b8e0934669 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -941,6 +941,12 @@ Buffer nvim_create_buf(Boolean listed, Boolean scratch, Error *err)
goto fail;
}
+ // Set last_changedtick to avoid triggering a TextChanged autocommand right
+ // after it was added.
+ buf->b_last_changedtick = buf_get_changedtick(buf);
+ buf->b_last_changedtick_i = buf_get_changedtick(buf);
+ buf->b_last_changedtick_pum = buf_get_changedtick(buf);
+
// Only strictly needed for scratch, but could just as well be consistent
// and do this now. buffer is created NOW, not when it latter first happen
// to reach a window or aucmd_prepbuf() ..
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index 09495fbaac..f28d6ea869 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -2869,6 +2869,18 @@ describe('API', function()
eq(false, eval('g:fired'))
end)
+ it('TextChanged and TextChangedI do not trigger without changes', function()
+ local buf = meths.create_buf(true, false)
+ command([[let g:changed = '']])
+ meths.create_autocmd({'TextChanged', 'TextChangedI'}, {
+ buffer = buf,
+ command = 'let g:changed ..= mode()',
+ })
+ meths.set_current_buf(buf)
+ feed('i')
+ eq('', meths.get_var('changed'))
+ end)
+
it('scratch-buffer', function()
eq({id=2}, meths.create_buf(false, true))
eq({id=3}, meths.create_buf(true, true))