neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim.git
Log | Files | Refs

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