Skip to content

Commit 9de1e97

Browse files
committed
fix(#1303): TextChanged should update completion only on text added
1 parent da88697 commit 9de1e97

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

lua/cmp/init.lua

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,22 @@ local on_text_changed = function()
372372
cmp.core:on_change('TextChanged')
373373
end
374374
end
375-
autocmd.subscribe({ 'TextChangedI', 'TextChangedP' }, on_text_changed)
375+
local lp = { 0, 0, buf = 0 }
376+
autocmd.subscribe({ 'TextChangedI', 'TextChangedP' }, function(s)
377+
local pos = vim.api.nvim_win_get_cursor(0)
378+
pos.buf = s.buf
379+
if
380+
s.buf ~= lp.buf -- same buf
381+
or not (lp[1] == pos[1] and lp[2] + 1 == pos[2]) -- same line
382+
or not (lp[1] + 1 == pos[1] and lp[2] == 0) -- beginning of next line
383+
then
384+
lp = pos
385+
return
386+
else
387+
lp = pos
388+
on_text_changed()
389+
end
390+
end)
376391
autocmd.subscribe('CmdlineChanged', async.debounce_next_tick(on_text_changed))
377392

378393
autocmd.subscribe('CursorMovedI', function()

lua/cmp/utils/autocmd.lua

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ local function create_autocmd(event)
1010
vim.api.nvim_create_autocmd(event, {
1111
desc = ('nvim-cmp: autocmd: %s'):format(event),
1212
group = autocmd.group,
13-
callback = function()
14-
autocmd.emit(event)
13+
callback = function(state)
14+
autocmd.emit(event, state)
1515
end,
1616
})
1717
end
1818

1919
---Subscribe autocmd
2020
---@param events string|string[]
21-
---@param callback function
21+
---@param callback fun(state:vim.api.keyset.create_autocmd.callback_args)
2222
---@return function
2323
autocmd.subscribe = function(events, callback)
2424
events = type(events) == 'string' and { events } or events
@@ -45,12 +45,13 @@ end
4545

4646
---Emit autocmd
4747
---@param event string
48-
autocmd.emit = function(event)
48+
---@param state vim.api.keyset.create_autocmd.callback_args
49+
autocmd.emit = function(event, state)
4950
debug.log(' ')
5051
debug.log(string.format('>>> %s', event))
5152
autocmd.events[event] = autocmd.events[event] or {}
5253
for _, callback in ipairs(autocmd.events[event]) do
53-
callback()
54+
callback(state)
5455
end
5556
end
5657

0 commit comments

Comments
 (0)