diff --git a/lua/sentiment.lua b/lua/sentiment.lua index 18d940f..121c895 100644 --- a/lua/sentiment.lua +++ b/lua/sentiment.lua @@ -1,6 +1,5 @@ local manager = require("sentiment.config.manager") local autocmds = require("sentiment.autocmds") -local ui = require("sentiment.ui") local M = {} @@ -24,28 +23,14 @@ function M.setup(cfg) vim.g.loaded_matchparen = 1 manager.apply(cfg or {}) - autocmds.renderer:create() + autocmds.start_rendering() create_user_commands() end ---Disable the plugin. -function M.disable() - if not autocmds.renderer:exists() then return end - - autocmds.renderer:remove() - for _, buf in ipairs(vim.api.nvim_list_bufs()) do - ui.clear(buf) - end -end +function M.disable() autocmds.stop_rendering() end ---Re-enable the plugin. -function M.enable() - if autocmds.renderer:exists() then return end - - for _, win in ipairs(vim.api.nvim_list_wins()) do - ui.render(win) - end - autocmds.renderer:create() -end +function M.enable() autocmds.start_rendering() end return M diff --git a/lua/sentiment/autocmds.lua b/lua/sentiment/autocmds.lua index 6c480f6..0fc0022 100644 --- a/lua/sentiment/autocmds.lua +++ b/lua/sentiment/autocmds.lua @@ -3,8 +3,9 @@ local ui = require("sentiment.ui") local M = {} ----`Pair` renderer. -M.renderer = Autocmd.new({ +local renderer_timer = nil + +local renderer = Autocmd.new({ name = "renderer", desc = "Render pair", events = { @@ -14,7 +15,32 @@ M.renderer = Autocmd.new({ "CursorMoved", "CursorMovedI", }, - callback = function() ui.render() end, + callback = function() renderer_timer = ui.render() end, }) +---Start rendering pairs. +function M.start_rendering() + if renderer:exists() then return end + + for _, win in ipairs(vim.api.nvim_list_wins()) do + renderer_timer = ui.render(win) + end + + renderer:create() +end + +---Stop rendering pairs. +function M.stop_rendering() + if not renderer:exists() then return end + + renderer:remove() + if renderer_timer ~= nil and renderer_timer:is_active() then + renderer_timer:close() + end + + for _, buf in ipairs(vim.api.nvim_list_bufs()) do + ui.clear(buf) + end +end + return M