autocmd.lua (1054B)
1 local api = vim.api 2 3 local M = {} 4 5 local globalListenerName = 'TMS_AUCMD' -- change this to be unique across multiple plugin name 6 local autocmdhandlers = {} 7 _G[globalListenerName] = function(name) autocmdhandlers[name]() end 8 9 function M.addListener(name, events, fn) 10 autocmdhandlers[name] = fn 11 vim.cmd('augroup ' .. name) 12 vim.cmd('autocmd!') 13 for _, event in ipairs(events) do 14 local cmd = 'lua ' .. globalListenerName .. '("' .. name .. '")' 15 vim.cmd('au ' .. event .. ' ' .. cmd) 16 end 17 vim.cmd('augroup end') 18 end 19 20 M.addListeners = function(listeners) 21 for group_name, definitions in pairs(listeners) do 22 api.nvim_command('augroup ' .. group_name) 23 api.nvim_command('autocmd!') 24 for _, definition in ipairs(definitions) do 25 local command = table.concat({'autocmd', definition}, ' ') 26 api.nvim_command(command) 27 end 28 api.nvim_command('augroup END') 29 end 30 end 31 32 function M.removeListener(name) 33 vim.cmd('augroup ' .. name) 34 vim.cmd('autocmd!') 35 vim.cmd('augroup end') 36 autocmdhandlers[name] = nil 37 end 38 39 return M