Still wip general
This commit is contained in:
parent
da338e6104
commit
cb81df46cc
|
@ -20,9 +20,12 @@ function hsv2:init(config)
|
|||
log = require("hsv2.log"):new(),
|
||||
uevent = require("hsv2.utils.uevent"):new(),
|
||||
}
|
||||
|
||||
self._store.uevent:init(self._store)
|
||||
|
||||
self._store.uevent:add_callback({ ".*" }, {
|
||||
callback = function (arg)
|
||||
vim.pretty_print("event:", arg)
|
||||
end
|
||||
})
|
||||
|
||||
self._store.config:init(self._store)
|
||||
self._store.log:init(self._store)
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
---@class hsv2.enums: hsv2.object_t
|
||||
local enums = {}
|
||||
|
||||
local const_tbl = require("hsv2.utils.const")
|
||||
|
||||
---@alias hsv2.uevent_t
|
||||
---| "config-changed"
|
||||
---| "key-doremap"
|
||||
|
@ -13,10 +11,9 @@ local const_tbl = require("hsv2.utils.const")
|
|||
---@field config_changed string triggered on configuration change
|
||||
---@field key_remap string key mapping should be redone
|
||||
enums.uevent = {
|
||||
["config-changed"] = "HSV2ConfigChanged",
|
||||
["key-doremap"] = "HSV2KeyRemap",
|
||||
["config_changed"] = "HSV2ConfigChanged",
|
||||
["key_doremap"] = "HSV2KeyRemap",
|
||||
}
|
||||
enums.uevents = const_tbl(enums.uevents)
|
||||
|
||||
---@alias hsv2.log_level_t
|
||||
---| "all" alias for the highest log level
|
||||
|
@ -47,6 +44,7 @@ enums.log_level = {
|
|||
info = 6,
|
||||
debug = 7,
|
||||
}
|
||||
enums.log_level = const_tbl(enums.log_level)
|
||||
|
||||
return require("hsv2.prototypes.object"):new(const_tbl(enums))
|
||||
require("hsv2.prototypes.object"):new(enums)
|
||||
|
||||
return enums
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
-- vi: et ts=4 sw=4:
|
||||
-- hsv-2
|
||||
---@module "hsv2.utils.log"
|
||||
---@class hsv2.log: hsv2.with_store_t
|
||||
---@class hsv2.log: hsv2.with_store_t, hsv2.object_t
|
||||
local log = {}
|
||||
local L = {}
|
||||
|
||||
|
@ -17,7 +17,7 @@ function log:init(store)
|
|||
self._store = store
|
||||
assert(type(self._store.config) == "table")
|
||||
self._store.config:set({ log = vim.deepcopy(self._config) })
|
||||
self._store.uevent:add_callback(self._store.enums.uevents.config_changed, {
|
||||
self._store.uevent:add_callback("config_changed", {
|
||||
callback = L.get_conf_change_cb(self),
|
||||
})
|
||||
end
|
||||
|
@ -30,7 +30,7 @@ function log:write(msg, level)
|
|||
local io = require("hsv2.utils.io")
|
||||
level = level or "notice"
|
||||
if L.level_cmp(self, level, log._config.level) <= 0 then
|
||||
local msg_with_prefix = vim.list_extend(L.msg_prefix(level), msg)
|
||||
local msg_with_prefix = vim.list_extend(L.msg_prefix(self, level), msg)
|
||||
io.echo(msg_with_prefix, true)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,18 +1,30 @@
|
|||
-- vi: et sw=4 ts=4
|
||||
-- hsv2
|
||||
---@class hsv2.config: hsv2.with_store_t
|
||||
---@class hsv2.config: hsv2.with_store_t, hsv2.object_t
|
||||
local config = {}
|
||||
|
||||
---@class hsv2.config_t
|
||||
config._config = {}
|
||||
|
||||
---@vararg string table key-path
|
||||
function config:get(...)
|
||||
local value = vim.tbl_get(self._config, ...)
|
||||
return type(value) == "table" and require("hsv2.utils.const")(value)
|
||||
local value = vim.tbl_get(self._config or {}, ...)
|
||||
local function deep_map_const(value)
|
||||
if type(value) == "table" then
|
||||
value = vim.tbl_map(deep_map_const, value)
|
||||
return require("hsv2.utils.const")(value)
|
||||
end
|
||||
|
||||
return value
|
||||
end
|
||||
|
||||
return type(value) == "table" and vim.tbl_map(deep_map_const, value)
|
||||
or value
|
||||
end
|
||||
|
||||
function config:set(conf, dont_exec_aucmds)
|
||||
vim.tbl_deep_extend("force", self._config, conf)
|
||||
---@
|
||||
function config:set(newconf, dont_exec_aucmds)
|
||||
vim.tbl_deep_extend("force", self._config or {}, newconf or {})
|
||||
if not dont_exec_aucmds then
|
||||
---@type hsv2.uevent_utils_t
|
||||
local uev = self:store("uevent")
|
||||
|
|
|
@ -7,16 +7,23 @@ local object = {}
|
|||
---@generic T: hsv2.object_t
|
||||
---@generic U: table
|
||||
---@param self T
|
||||
---@param tbl? U
|
||||
---@param t? U
|
||||
---@return T|U
|
||||
function object:new(tbl)
|
||||
tbl = tbl or {}
|
||||
setmetatable(tbl, self)
|
||||
function object:new(t, append_only)
|
||||
t = t or {}
|
||||
setmetatable(t, self)
|
||||
self.__index = self
|
||||
self.__pairs = self
|
||||
self.__ipairs = self
|
||||
if append_only then
|
||||
self.__newindex = function(_, k, v)
|
||||
if t[k] == nil then t[k] = v
|
||||
else error("tried to overwrite const t['" .. k .. "]", 2) end
|
||||
return t[k]
|
||||
end
|
||||
end
|
||||
|
||||
return tbl
|
||||
return t
|
||||
end
|
||||
|
||||
return object
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
-- vi: ts=4 sw=4 et:
|
||||
-- hsv2
|
||||
|
||||
---Set metatable to protect `t` keys from being overwritten
|
||||
---@generic T: table
|
||||
---@param t T
|
||||
---@return T t
|
||||
local function const_tbl(t)
|
||||
return setmetatable({}, {
|
||||
__index = t,
|
||||
__newindex = function(proxy, k, v)
|
||||
if t[k] == nil then t[k] = v
|
||||
else error("tried to overwrite const t['" .. k .. "]", 2) end
|
||||
return t[k]
|
||||
end,
|
||||
__ipairs = function()
|
||||
assert(false, "Implement me!")
|
||||
end,
|
||||
__pairs = function()
|
||||
assert(false, "Implement me!")
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
return const_tbl
|
|
@ -27,15 +27,15 @@ local default_augroup = "hsv2"
|
|||
---@class hsv2.aucmd.opts_t
|
||||
---@field callback hsv2.aucmd.cbck_t
|
||||
---@field desc? string
|
||||
---@field group? integer|string
|
||||
---@field group? string
|
||||
---@field nested? boolean
|
||||
---@field once? boolean
|
||||
--
|
||||
---@param uev hsv2.uevent_t|hsv2.uevent_t[]
|
||||
---@param uev hsv2.uevent_t|list<integer, hsv2.uevent_t>
|
||||
---@param opts hsv2.aucmd.opts_t
|
||||
function uevent:add_callback(uev, opts)
|
||||
opts.group = opts.group and "hsv2-" .. opts.group or default_augroup
|
||||
if L.valid_uev(self, uev) and not next(self:get_callback(uev, opts.callback, opts.group)) then
|
||||
if L.valid_uev(self, uev) then
|
||||
self._callbacks[opts.group] = self._callbacks[opts.group] or {}
|
||||
self._callbacks[opts.group][uev] = self._callbacks[uev] or {}
|
||||
self._callbacks[opts.group][uev][opts.callback] = vim.api.nvim_create_autocmd("User", {
|
||||
|
@ -57,18 +57,22 @@ function uevent:del_callback(uev, cb, group)
|
|||
end
|
||||
end
|
||||
|
||||
function uevent:get_callback(uev, cb, group)
|
||||
---
|
||||
---@param uev hsv2.uevent_t
|
||||
---@param cb hsv2.aucmd.cbck_t
|
||||
---@param group string
|
||||
function uevent:get_callbacks(uev, group)
|
||||
group = group or default_augroup
|
||||
local gid = vim.api.nvim_create_augroup(group, { clear = false })
|
||||
return vim.api.nvim_get_autocmds({
|
||||
event = "User",
|
||||
callback = cb,
|
||||
group = group,
|
||||
pattern = L.valid_uev(self, uev),
|
||||
event = "User",
|
||||
group = gid,
|
||||
pattern = L.valid_uev(self, uev),
|
||||
})
|
||||
end
|
||||
|
||||
---@generic uev_t: hsv2.uevent_t
|
||||
---@param uev uev_t|uev_t[]
|
||||
---@param uev uev_t|list<integer, uev_t>
|
||||
---@param buffer? integer buffer ID
|
||||
---@param group? string|integer
|
||||
---|> "hsv2"
|
||||
|
@ -88,11 +92,11 @@ end
|
|||
|
||||
---comment
|
||||
---@generic uev_t: hsv2.uevent_t
|
||||
---@param uevents uev_t|uev_t[]
|
||||
---@return boolean|uev_t|uev_t[]
|
||||
---@param uevents uev_t|list<integer, uev_t>
|
||||
---@return boolean|uev_t|list<integer, uev_t>
|
||||
function L.valid_uev(self, uevents)
|
||||
---@type string[]
|
||||
local valid_uevents = vim.tbl_keys(self:store("enums", "uevents"))
|
||||
local valid_uevents = vim.tbl_keys(self:store("enums", "uevent"))
|
||||
local function valid(uev)
|
||||
for _, valid_uev in ipairs(valid_uevents) do
|
||||
if valid_uev:match(uev) then return true end
|
||||
|
|
Loading…
Reference in New Issue