diff --git a/README.md b/README.md index aa55402..e61ba03 100644 --- a/README.md +++ b/README.md @@ -46,19 +46,6 @@ the default configuration is as follows: ```lua require("lylla").setup({ refresh_rate = 300, - events = { - "WinEnter", - "BufEnter", - "BufWritePost", - "SessionLoadPost", - "FileChangedShellPost", - "VimResized", - "Filetype", - "CursorMoved", - "CursorMovedI", - "ModeChanged", - "CmdlineEnter", - }, hls = {}, modules = { "%<%f %h%w%m%r", diff --git a/lua/lylla/config.lua b/lua/lylla/config.lua index 021d6e3..b59b566 100644 --- a/lua/lylla/config.lua +++ b/lua/lylla/config.lua @@ -8,7 +8,6 @@ ---@class lylla.config ---@field refresh_rate integer ----@field events string[] ---@field hls table<'normal'|'visual'|'command'|'insert', vim.api.keyset.highlight> ---@field modules (lylla.item|lylla.item.tuple|string)[] ---@field winbar any[] @@ -20,19 +19,6 @@ local M = {} ---@text # Default ~ M.default = { refresh_rate = 300, - events = { - "WinEnter", - "BufEnter", - "BufWritePost", - "SessionLoadPost", - "FileChangedShellPost", - "VimResized", - "Filetype", - "CursorMoved", - "CursorMovedI", - "ModeChanged", - "CmdlineEnter", - }, hls = {}, modules = { "%<%f %h%w%m%r", diff --git a/lua/lylla/statusline.lua b/lua/lylla/statusline.lua index 08930cc..3f89ed3 100644 --- a/lua/lylla/statusline.lua +++ b/lua/lylla/statusline.lua @@ -43,12 +43,18 @@ function statusline:init() self:refresh() end) - self.refreshau = vim.api.nvim_create_autocmd(require("lylla.config").get().events, { - group = vim.api.nvim_create_augroup("lylla:refresh", { clear = false }), - callback = function(ev) - self:refresh(ev) - end, - }) + self.refreshau = vim.api.nvim_create_augroup(("lylla:refresh[%d]"):format(self.win), { clear = true }) + + local events = self:getevents() + + for i = 1, #events do + vim.api.nvim_create_autocmd(events[i], { + group = self.refreshau, + callback = function(ev) + self:refresh(ev) + end, + }) + end end ---@class lylla.proto @@ -56,10 +62,28 @@ end function statusline:close() self.timer:stop() self.timer:close() - vim.api.nvim_del_autocmd(self.refreshau) + pcall(vim.api.nvim_del_augroup_by_id, self.refreshau) statusline.wins[self.win] = nil end +---@class lylla.proto +---@field getevents fun(self): string[] +function statusline:getevents() + local t = vim.iter(ipairs(self.modules)):fold({}, function(acc, _, module) + if type(module) == "table" and module.fn and type(module.fn) == "function" then + if module.opts and module.opts.events then + return vim.iter(module.opts.events):fold(acc, function(a, event) + a[event] = true + return a + end) + end + end + return acc + end) + + return vim.tbl_keys(t) +end + local function refreshcomponent(self, fn, ev) do local ok, result = pcall(fn, self, ev)