@@ -6,6 +6,16 @@ autocmd.group = vim.api.nvim_create_augroup('___cmp___', { clear = true })
6
6
7
7
autocmd .events = {}
8
8
9
+ local function create_autocmd (event )
10
+ vim .api .nvim_create_autocmd (event , {
11
+ desc = (' nvim-cmp: autocmd: %s' ):format (event ),
12
+ group = autocmd .group ,
13
+ callback = function ()
14
+ autocmd .emit (event )
15
+ end ,
16
+ })
17
+ end
18
+
9
19
--- Subscribe autocmd
10
20
--- @param events string | string[]
11
21
--- @param callback function
@@ -16,13 +26,7 @@ autocmd.subscribe = function(events, callback)
16
26
for _ , event in ipairs (events ) do
17
27
if not autocmd .events [event ] then
18
28
autocmd .events [event ] = {}
19
- vim .api .nvim_create_autocmd (event , {
20
- desc = (' nvim-cmp: autocmd: %s' ):format (event ),
21
- group = autocmd .group ,
22
- callback = function ()
23
- autocmd .emit (event )
24
- end ,
25
- })
29
+ create_autocmd (event )
26
30
end
27
31
table.insert (autocmd .events [event ], callback )
28
32
end
@@ -50,4 +54,24 @@ autocmd.emit = function(event)
50
54
end
51
55
end
52
56
57
+ --- Resubscribe to events
58
+ --- @param events string[]
59
+ autocmd .resubscribe = function (events )
60
+ -- Delete the autocommands if present
61
+ local found = vim .api .nvim_get_autocmds ({
62
+ group = autocmd .group ,
63
+ event = events ,
64
+ })
65
+ for _ , to_delete in ipairs (found ) do
66
+ vim .api .nvim_del_autocmd (to_delete .id )
67
+ end
68
+
69
+ -- Recreate if event is known
70
+ for _ , event in ipairs (events ) do
71
+ if autocmd .events [event ] then
72
+ create_autocmd (event )
73
+ end
74
+ end
75
+ end
76
+
53
77
return autocmd
0 commit comments