mirror of
https://github.com/zoriya/lz.n.git
synced 2026-06-02 19:00:41 +00:00
feat: handler for lazy-loading colorschemes
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
local loader = require("lz.n.loader")
|
||||
|
||||
---@class lz.n.ColorschemeHandler: lz.n.Handler
|
||||
---@field augroup? integer
|
||||
|
||||
---@type lz.n.ColorschemeHandler
|
||||
local M = {
|
||||
pending = {},
|
||||
type = "colorscheme",
|
||||
augroup = nil,
|
||||
}
|
||||
|
||||
---@param plugin lz.n.Plugin
|
||||
function M.del(plugin)
|
||||
for _, plugins in pairs(M.pending) do
|
||||
plugins[plugin.name] = nil
|
||||
end
|
||||
end
|
||||
|
||||
---@param name string
|
||||
local function on_colorscheme(name)
|
||||
if vim.tbl_contains(vim.fn.getcompletion("", "color"), name) then
|
||||
return
|
||||
end
|
||||
loader.load(vim.tbl_values(M.pending[name]))
|
||||
end
|
||||
|
||||
local function init()
|
||||
if M.augroup then
|
||||
return
|
||||
end
|
||||
M.augroup = vim.api.nvim_create_augroup("lz_n_handler_colorscheme", { clear = true })
|
||||
vim.api.nvim_create_autocmd("ColorSchemePre", {
|
||||
callback = function(event)
|
||||
on_colorscheme(event.match)
|
||||
end,
|
||||
group = M.augroup,
|
||||
})
|
||||
end
|
||||
|
||||
---@param plugin lz.n.Plugin
|
||||
function M.add(plugin)
|
||||
if not plugin.colorscheme then
|
||||
return
|
||||
end
|
||||
init()
|
||||
for _, colorscheme in pairs(plugin.colorscheme) do
|
||||
M.pending[colorscheme] = M.pending[colorscheme] or {}
|
||||
M.pending[colorscheme][plugin.name] = plugin.name
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -12,6 +12,7 @@ M.types = {
|
||||
event = "event",
|
||||
ft = "ft",
|
||||
keys = "keys",
|
||||
colorscheme = "colorscheme",
|
||||
}
|
||||
|
||||
local handlers = {
|
||||
@@ -19,6 +20,7 @@ local handlers = {
|
||||
event = require("lz.n.handler.event"),
|
||||
ft = require("lz.n.handler.ft"),
|
||||
keys = require("lz.n.handler.keys"),
|
||||
colorscheme = require("lz.n.handler.colorscheme"),
|
||||
}
|
||||
|
||||
---@param plugin lz.n.Plugin
|
||||
|
||||
Reference in New Issue
Block a user