@@ -20,8 +20,8 @@ local autocomplete = {
20
20
context = nil ,
21
21
event_targets = {
22
22
on_position_update = {},
23
- --- @type fun ( item : blink.cmp.CompletionItem ?, context : blink.cmp.Context )
24
- on_select = function () end ,
23
+ --- @type table< fun (item : blink.cmp.CompletionItem ?, context : blink.cmp.Context )>
24
+ on_select = {} ,
25
25
--- @type table<fun ()>
26
26
on_close = {},
27
27
--- @type table<fun ()>
@@ -82,7 +82,8 @@ function autocomplete.open_with_items(context, items)
82
82
83
83
-- todo: some logic to maintain the selection if the user moved the cursor?
84
84
vim .api .nvim_win_set_cursor (autocomplete .win :get_win (), { 1 , 0 })
85
- autocomplete .event_targets .on_select (autocomplete .get_selected_item (), context )
85
+
86
+ autocomplete .on_select_callbacks (autocomplete .get_selected_item (), context )
86
87
end
87
88
88
89
function autocomplete .open ()
@@ -192,7 +193,7 @@ local function select(line, skip_auto_insert)
192
193
end )
193
194
end
194
195
195
- autocomplete .event_targets . on_select (selected_item , autocomplete .context )
196
+ autocomplete .on_select_callbacks (selected_item , autocomplete .context )
196
197
end
197
198
198
199
--- @param s opts ? { skip_auto_insert ?: boolean }
@@ -235,7 +236,15 @@ function autocomplete.select_prev(opts)
235
236
select (line , opts and opts .skip_auto_insert )
236
237
end
237
238
238
- function autocomplete .listen_on_select (callback ) autocomplete .event_targets .on_select = callback end
239
+ function autocomplete .listen_on_select (callback ) table.insert (autocomplete .event_targets .on_select , callback ) end
240
+
241
+ --- @param item ? blink.cmp.CompletionItem
242
+ --- @param context blink.cmp.Context
243
+ function autocomplete .on_select_callbacks (item , context )
244
+ for _ , callback in ipairs (autocomplete .event_targets .on_select ) do
245
+ callback (item , context )
246
+ end
247
+ end
239
248
240
249
---- ------ Rendering ----------
241
250
0 commit comments