Skip to content

Commit 65eb336

Browse files
committed
fix: select_and_accept not working with auto_insert
closes #118
1 parent 569156f commit 65eb336

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

lua/blink/cmp/init.lua

+4-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,10 @@ cmp.select_and_accept = function()
151151

152152
vim.schedule(function()
153153
-- select an item if none is selected
154-
if not cmp.windows.autocomplete.get_selected_item() then cmp.windows.autocomplete.select_next() end
154+
if not cmp.windows.autocomplete.get_selected_item() then
155+
-- avoid running auto_insert since we're about to accept anyway
156+
cmp.windows.autocomplete.select_next({ skip_auto_insert = true })
157+
end
155158

156159
local item = cmp.windows.autocomplete.get_selected_item()
157160
if item ~= nil then require('blink.cmp.accept')(item) end

lua/blink/cmp/windows/autocomplete.lua

+9-6
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,15 @@ function autocomplete.accept()
175175
end
176176

177177
--- @param line number
178-
local function select(line)
178+
--- @param skip_auto_insert? boolean
179+
local function select(line, skip_auto_insert)
179180
autocomplete.set_has_selected(true)
180181
vim.api.nvim_win_set_cursor(autocomplete.win:get_win(), { line, 0 })
181182

182183
local selected_item = autocomplete.get_selected_item()
183184

184185
-- when auto_insert is enabled, we immediately apply the text edit
185-
if config.windows.autocomplete.selection == 'auto_insert' and selected_item ~= nil then
186+
if config.windows.autocomplete.selection == 'auto_insert' and selected_item ~= nil and not skip_auto_insert then
186187
require('blink.cmp.trigger.completion').suppress_events_for_callback(function()
187188
if autocomplete.preview_text_edit ~= nil and autocomplete.preview_context_id == autocomplete.context.id then
188189
text_edits_lib.undo_text_edit(autocomplete.preview_text_edit)
@@ -195,7 +196,8 @@ local function select(line)
195196
autocomplete.event_targets.on_select(selected_item, autocomplete.context)
196197
end
197198

198-
function autocomplete.select_next()
199+
--- @params opts? { skip_auto_insert?: boolean }
200+
function autocomplete.select_next(opts)
199201
if not autocomplete.win:is_open() then return end
200202

201203
local cycle_from_bottom = config.windows.autocomplete.cycle.from_bottom
@@ -213,10 +215,11 @@ function autocomplete.select_next()
213215
line = line + 1
214216
end
215217

216-
select(line)
218+
select(line, opts and opts.skip_auto_insert)
217219
end
218220

219-
function autocomplete.select_prev()
221+
--- @params opts? { skip_auto_insert?: boolean }
222+
function autocomplete.select_prev(opts)
220223
if not autocomplete.win:is_open() then return end
221224

222225
local cycle_from_top = config.windows.autocomplete.cycle.from_top
@@ -230,7 +233,7 @@ function autocomplete.select_prev()
230233
line = line - 1
231234
end
232235

233-
select(line)
236+
select(line, opts and opts.skip_auto_insert)
234237
end
235238

236239
function autocomplete.listen_on_select(callback) autocomplete.event_targets.on_select = callback end

0 commit comments

Comments
 (0)