diff --git a/bundle/nvim-plug/lua/plug/hooks.lua b/bundle/nvim-plug/lua/plug/hooks.lua index 2108b1706..22b18aaf5 100644 --- a/bundle/nvim-plug/lua/plug/hooks.lua +++ b/bundle/nvim-plug/lua/plug/hooks.lua @@ -7,6 +7,7 @@ local plugin_loader = require('plug.loader') local event_plugins = {} local cmd_plugins = {} local on_ft_plugins = {} +local on_fn_plugins = {} function M.on_events(events, plugSpec) event_plugins[plugSpec.name] = vim.api.nvim_create_autocmd(events, { @@ -88,4 +89,25 @@ function M.on_map(maps, plugSpec) end end +function M.on_func(fn, plugSpec) + local fns + if type(fn) == 'table' then + fns = fn + elseif type(fn) == 'string' then + fns = { fn } + end + on_fn_plugins[plugSpec.name] = vim.api.nvim_create_autocmd({ 'FuncUndefined' }, { + group = group, + pattern = fns, + callback = function(_) + + if on_fn_plugins[plugSpec.name] then + vim.api.nvim_del_autocmd(on_fn_plugins[plugSpec.name]) + end + plugin_loader.load(plugSpec) + + end, + }) +end + return M diff --git a/bundle/nvim-plug/lua/plug/init.lua b/bundle/nvim-plug/lua/plug/init.lua index daaf1d169..b191ebf1e 100644 --- a/bundle/nvim-plug/lua/plug/init.lua +++ b/bundle/nvim-plug/lua/plug/init.lua @@ -40,7 +40,17 @@ function M.add(plugins) hooks.on_map(plug.on_map, plug) end - if not plug.events and not plug.cmds and not plug.on_ft and not plug.on_map then + if plug.on_func then + hooks.on_func(plug.on_func, plug) + end + + if + not plug.events + and not plug.cmds + and not plug.on_ft + and not plug.on_map + and not plug.on_func + then loader.load(plug) end ::continue::