@@ -52,39 +52,50 @@ local M = {
5252 VIM_WIN_ENTER = " vim_win_enter" ,
5353}
5454
55+ --- @param autocmds string
56+ --- @return string event
57+ --- @return string ? pattern
58+ local parse_autocmd_string = function (autocmds )
59+ local parsed = vim .split (autocmds , " " )
60+ return parsed [1 ], parsed [2 ]
61+ end
62+
5563--- @param event_name neotree.Event | string
64+ --- @param autocmds string[]
65+ --- @param debounce_frequency integer
66+ --- @param seed_fn function
67+ --- @param nested boolean
5668M .define_autocmd_event = function (event_name , autocmds , debounce_frequency , seed_fn , nested )
57- local opts = {
69+ log .debug (" Defining autocmd event: %s" , event_name )
70+ local augroup_name = " NeoTreeEvent_" .. event_name
71+ q .define_event (event_name , {
5872 setup = function ()
59- local tpl =
60- " :lua require('neo-tree.events').fire_event('%s', { afile = vim.F.npcall(vim.fn.expand, '<afile>') or '' })"
61- local callback = string.format (tpl , event_name )
62- if nested then
63- callback = " ++nested " .. callback
73+ local augroup = vim .api .nvim_create_augroup (augroup_name , { clear = false })
74+ for _ , autocmd in ipairs (autocmds ) do
75+ local event , pattern = parse_autocmd_string (autocmd )
76+ log .trace (" Registering autocmds on %s %s" , event , pattern or " " )
77+ vim .api .nvim_create_autocmd ({ event }, {
78+ pattern = pattern or " *" ,
79+ group = augroup ,
80+ nested = nested ,
81+ callback = function (args )
82+ --- @class neotree.Event.Autocmd.CallbackArgs : vim.api.keyset.create_autocmd.callback_args
83+ --- @field afile string
84+ local event_args = args
85+ event_args .afile = args .file or " "
86+ M .fire_event (event_name , event_args )
87+ end ,
88+ })
6489 end
65-
66- local autocmd = table.concat (autocmds , " ," )
67- if not vim .startswith (autocmd , " User" ) then
68- autocmd = autocmd .. " *"
69- end
70- local cmds = {
71- " augroup NeoTreeEvent_" .. event_name ,
72- " autocmd " .. autocmd .. " " .. callback ,
73- " augroup END" ,
74- }
75- log .trace (" Registering autocmds: %s" , table.concat (cmds , " \n " ))
76- vim .cmd (table.concat (cmds , " \n " ))
7790 end ,
7891 seed = seed_fn ,
7992 teardown = function ()
8093 log .trace (" Teardown autocmds for " , event_name )
81- vim .cmd ( string.format ( " autocmd! NeoTreeEvent_%s " , event_name ) )
94+ vim .api . nvim_create_augroup ( augroup_name , { clear = true } )
8295 end ,
8396 debounce_frequency = debounce_frequency ,
8497 debounce_strategy = utils .debounce_strategy .CALL_LAST_ONLY ,
85- }
86- log .debug (" Defining autocmd event: %s" , event_name )
87- q .define_event (event_name , opts )
98+ })
8899end
89100
90101M .clear_all_events = q .clear_all_events
0 commit comments