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(),
|
log = require("hsv2.log"):new(),
|
||||||
uevent = require("hsv2.utils.uevent"):new(),
|
uevent = require("hsv2.utils.uevent"):new(),
|
||||||
}
|
}
|
||||||
|
|
||||||
self._store.uevent:init(self._store)
|
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.config:init(self._store)
|
||||||
self._store.log:init(self._store)
|
self._store.log:init(self._store)
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
---@class hsv2.enums: hsv2.object_t
|
---@class hsv2.enums: hsv2.object_t
|
||||||
local enums = {}
|
local enums = {}
|
||||||
|
|
||||||
local const_tbl = require("hsv2.utils.const")
|
|
||||||
|
|
||||||
---@alias hsv2.uevent_t
|
---@alias hsv2.uevent_t
|
||||||
---| "config-changed"
|
---| "config-changed"
|
||||||
---| "key-doremap"
|
---| "key-doremap"
|
||||||
|
@ -13,10 +11,9 @@ local const_tbl = require("hsv2.utils.const")
|
||||||
---@field config_changed string triggered on configuration change
|
---@field config_changed string triggered on configuration change
|
||||||
---@field key_remap string key mapping should be redone
|
---@field key_remap string key mapping should be redone
|
||||||
enums.uevent = {
|
enums.uevent = {
|
||||||
["config-changed"] = "HSV2ConfigChanged",
|
["config_changed"] = "HSV2ConfigChanged",
|
||||||
["key-doremap"] = "HSV2KeyRemap",
|
["key_doremap"] = "HSV2KeyRemap",
|
||||||
}
|
}
|
||||||
enums.uevents = const_tbl(enums.uevents)
|
|
||||||
|
|
||||||
---@alias hsv2.log_level_t
|
---@alias hsv2.log_level_t
|
||||||
---| "all" alias for the highest log level
|
---| "all" alias for the highest log level
|
||||||
|
@ -47,6 +44,7 @@ enums.log_level = {
|
||||||
info = 6,
|
info = 6,
|
||||||
debug = 7,
|
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:
|
-- vi: et ts=4 sw=4:
|
||||||
-- hsv-2
|
-- hsv-2
|
||||||
---@module "hsv2.utils.log"
|
---@module "hsv2.utils.log"
|
||||||
---@class hsv2.log: hsv2.with_store_t
|
---@class hsv2.log: hsv2.with_store_t, hsv2.object_t
|
||||||
local log = {}
|
local log = {}
|
||||||
local L = {}
|
local L = {}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ function log:init(store)
|
||||||
self._store = store
|
self._store = store
|
||||||
assert(type(self._store.config) == "table")
|
assert(type(self._store.config) == "table")
|
||||||
self._store.config:set({ log = vim.deepcopy(self._config) })
|
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),
|
callback = L.get_conf_change_cb(self),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -30,7 +30,7 @@ function log:write(msg, level)
|
||||||
local io = require("hsv2.utils.io")
|
local io = require("hsv2.utils.io")
|
||||||
level = level or "notice"
|
level = level or "notice"
|
||||||
if L.level_cmp(self, level, log._config.level) <= 0 then
|
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)
|
io.echo(msg_with_prefix, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,18 +1,30 @@
|
||||||
-- vi: et sw=4 ts=4
|
-- vi: et sw=4 ts=4
|
||||||
-- hsv2
|
-- hsv2
|
||||||
---@class hsv2.config: hsv2.with_store_t
|
---@class hsv2.config: hsv2.with_store_t, hsv2.object_t
|
||||||
local config = {}
|
local config = {}
|
||||||
|
|
||||||
|
---@class hsv2.config_t
|
||||||
config._config = {}
|
config._config = {}
|
||||||
|
|
||||||
|
---@vararg string table key-path
|
||||||
function config:get(...)
|
function config:get(...)
|
||||||
local value = vim.tbl_get(self._config, ...)
|
local value = vim.tbl_get(self._config or {}, ...)
|
||||||
return type(value) == "table" and require("hsv2.utils.const")(value)
|
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
|
or value
|
||||||
end
|
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
|
if not dont_exec_aucmds then
|
||||||
---@type hsv2.uevent_utils_t
|
---@type hsv2.uevent_utils_t
|
||||||
local uev = self:store("uevent")
|
local uev = self:store("uevent")
|
||||||
|
|
|
@ -7,16 +7,23 @@ local object = {}
|
||||||
---@generic T: hsv2.object_t
|
---@generic T: hsv2.object_t
|
||||||
---@generic U: table
|
---@generic U: table
|
||||||
---@param self T
|
---@param self T
|
||||||
---@param tbl? U
|
---@param t? U
|
||||||
---@return T|U
|
---@return T|U
|
||||||
function object:new(tbl)
|
function object:new(t, append_only)
|
||||||
tbl = tbl or {}
|
t = t or {}
|
||||||
setmetatable(tbl, self)
|
setmetatable(t, self)
|
||||||
self.__index = self
|
self.__index = self
|
||||||
self.__pairs = self
|
self.__pairs = self
|
||||||
self.__ipairs = 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
|
end
|
||||||
|
|
||||||
return object
|
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
|
---@class hsv2.aucmd.opts_t
|
||||||
---@field callback hsv2.aucmd.cbck_t
|
---@field callback hsv2.aucmd.cbck_t
|
||||||
---@field desc? string
|
---@field desc? string
|
||||||
---@field group? integer|string
|
---@field group? string
|
||||||
---@field nested? boolean
|
---@field nested? boolean
|
||||||
---@field once? 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
|
---@param opts hsv2.aucmd.opts_t
|
||||||
function uevent:add_callback(uev, opts)
|
function uevent:add_callback(uev, opts)
|
||||||
opts.group = opts.group and "hsv2-" .. opts.group or default_augroup
|
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] = self._callbacks[opts.group] or {}
|
||||||
self._callbacks[opts.group][uev] = self._callbacks[uev] or {}
|
self._callbacks[opts.group][uev] = self._callbacks[uev] or {}
|
||||||
self._callbacks[opts.group][uev][opts.callback] = vim.api.nvim_create_autocmd("User", {
|
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
|
||||||
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
|
group = group or default_augroup
|
||||||
|
local gid = vim.api.nvim_create_augroup(group, { clear = false })
|
||||||
return vim.api.nvim_get_autocmds({
|
return vim.api.nvim_get_autocmds({
|
||||||
event = "User",
|
event = "User",
|
||||||
callback = cb,
|
group = gid,
|
||||||
group = group,
|
pattern = L.valid_uev(self, uev),
|
||||||
pattern = L.valid_uev(self, uev),
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
---@generic uev_t: hsv2.uevent_t
|
---@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 buffer? integer buffer ID
|
||||||
---@param group? string|integer
|
---@param group? string|integer
|
||||||
---|> "hsv2"
|
---|> "hsv2"
|
||||||
|
@ -88,11 +92,11 @@ end
|
||||||
|
|
||||||
---comment
|
---comment
|
||||||
---@generic uev_t: hsv2.uevent_t
|
---@generic uev_t: hsv2.uevent_t
|
||||||
---@param uevents uev_t|uev_t[]
|
---@param uevents uev_t|list<integer, uev_t>
|
||||||
---@return boolean|uev_t|uev_t[]
|
---@return boolean|uev_t|list<integer, uev_t>
|
||||||
function L.valid_uev(self, uevents)
|
function L.valid_uev(self, uevents)
|
||||||
---@type string[]
|
---@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)
|
local function valid(uev)
|
||||||
for _, valid_uev in ipairs(valid_uevents) do
|
for _, valid_uev in ipairs(valid_uevents) do
|
||||||
if valid_uev:match(uev) then return true end
|
if valid_uev:match(uev) then return true end
|
||||||
|
|
Loading…
Reference in New Issue