@@ -158,39 +158,37 @@ function autocomplete.listen_on_position_update(callback)
158
158
table.insert (autocomplete .event_targets .on_position_update , callback )
159
159
end
160
160
161
- ---- ------ Selection ----------
161
+ ---- ------ Selection/Accept ----------
162
+
163
+ function autocomplete .accept ()
164
+ local selected_item = autocomplete .get_selected_item ()
165
+ if selected_item == nil then return end
166
+
167
+ -- undo the preview if it exists
168
+ if autocomplete .preview_text_edit ~= nil and autocomplete .preview_context_id == autocomplete .context .id then
169
+ text_edits_lib .undo_text_edit (autocomplete .preview_text_edit )
170
+ end
171
+
172
+ -- apply
173
+ require (' blink.cmp.accept' )(selected_item )
174
+ return true
175
+ end
162
176
163
177
--- @param line number
164
178
local function select (line )
165
- local prev_selected_item = autocomplete .get_selected_item ()
166
-
167
179
autocomplete .set_has_selected (true )
168
180
vim .api .nvim_win_set_cursor (autocomplete .win :get_win (), { line , 0 })
169
181
170
182
local selected_item = autocomplete .get_selected_item ()
171
183
172
184
-- when auto_insert is enabled, we immediately apply the text edit
173
- -- todo: move this to the accept module
174
185
if config .windows .autocomplete .selection == ' auto_insert' and selected_item ~= nil then
175
186
require (' blink.cmp.trigger.completion' ).suppress_events_for_callback (function ()
176
- local text_edit = text_edits_lib .get_from_item (selected_item )
177
-
178
- if selected_item .insertTextFormat == vim .lsp .protocol .InsertTextFormat .Snippet then
179
- text_edit .newText = selected_item .label
180
- end
181
-
182
- if
183
- prev_selected_item ~= nil and prev_selected_item .insertTextFormat == vim .lsp .protocol .InsertTextFormat .Snippet
184
- then
185
- local current_col = vim .api .nvim_win_get_cursor (0 )[2 ]
186
- text_edit .range .start .character = current_col - # prev_selected_item .label
187
+ if autocomplete .preview_text_edit ~= nil and autocomplete .preview_context_id == autocomplete .context .id then
188
+ text_edits_lib .undo_text_edit (autocomplete .preview_text_edit )
187
189
end
188
-
189
- text_edits_lib .apply_text_edits (selected_item .client_id , { text_edit })
190
- vim .api .nvim_win_set_cursor (0 , {
191
- text_edit .range .start .line + 1 ,
192
- text_edit .range .start .character + # text_edit .newText ,
193
- })
190
+ autocomplete .preview_text_edit = require (' blink.cmp.accept.preview' )(selected_item )
191
+ autocomplete .preview_context_id = autocomplete .context .id
194
192
end )
195
193
end
196
194
0 commit comments