Skip to content

Commit 4ceee25

Browse files
committed
ref & docs: update README and update setHl and pre_leftcol
1 parent 4bdaa28 commit 4ceee25

File tree

4 files changed

+72
-71
lines changed

4 files changed

+72
-71
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ One picture to understand what these mods do
7575

7676
## Requirements
7777

78-
neovim version `>= 0.9.0`
78+
neovim version `>= 0.10.0`
7979

8080
## Installation (with lazy.nvim)
8181

README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272

7373
## 需求
7474

75-
neovim 版本 `>= 0.9.0`
75+
neovim 版本 `>= 0.10.0`
7676

7777
## 安装(使用 lazy.nvim)
7878

lua/hlchunk/mods/base_mod/init.lua

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,31 @@ end
148148

149149
function BaseMod:createAutocmd()
150150
api.nvim_create_augroup(self.meta.augroup_name, { clear = true })
151-
151+
api.nvim_create_autocmd("WinScrolled", {
152+
group = self.meta.augroup_name,
153+
callback = function()
154+
local data = vim.v.event
155+
156+
for winid, changes in pairs(data) do
157+
if winid ~= "all" then
158+
winid = tonumber(winid) --[[@as number]]
159+
local bufnr = api.nvim_win_get_buf(winid)
160+
if changes.topline ~= 0 then
161+
api.nvim_exec_autocmds("User", {
162+
pattern = "WinScrolledY",
163+
data = { winid = winid, buf = bufnr },
164+
})
165+
end
166+
if changes.leftcol ~= 0 then
167+
api.nvim_exec_autocmds("User", {
168+
pattern = "WinScrolledX",
169+
data = { winid = winid, buf = bufnr },
170+
})
171+
end
172+
end
173+
end
174+
end,
175+
})
152176
api.nvim_create_autocmd({ "ColorScheme" }, {
153177
group = self.meta.augroup_name,
154178
pattern = "*",
@@ -163,45 +187,33 @@ function BaseMod:clearAutocmd()
163187
end
164188

165189
function BaseMod:setHl()
166-
local hl_conf = self.conf.style
167-
self.meta.hl_name_list = {}
168-
169-
-- such as style = "#abcabc"
170-
if type(hl_conf) == "string" then
171-
api.nvim_set_hl(0, self.meta.hl_base_name .. "1", { fg = hl_conf })
172-
self.meta.hl_name_list = { self.meta.hl_base_name .. "1" }
173-
return
174-
end
175-
176-
for idx, val in ipairs(hl_conf) do
177-
local value_type = type(val)
178-
if value_type == "table" then
179-
if type(val.fg) == "function" or type(val.bg) == "function" then
180-
--[[
181-
such as style = {
182-
{ fg = fg1cb, bg = bg1cb },
183-
{ fg = "#abcabc", bg = "#cdefef"},
184-
}
185-
--]]
186-
local value_tmp = vim.deepcopy(val)
187-
value_tmp.fg = type(val.fg) == "function" and val.fg() or val.fg
188-
value_tmp.bg = type(val.bg) == "function" and val.bg() or val.bg
189-
api.nvim_set_hl(0, self.meta.hl_base_name .. idx, value_tmp)
190-
else
191-
--[[
192-
such as style = {
193-
{ fg = "#abcabc", bg = "#cdefef" },
194-
{ fg = "#abcabc", bg = "#cdefef" },
195-
}
196-
--]]
197-
api.nvim_set_hl(0, self.meta.hl_base_name .. idx, val)
190+
local function inner(hl_entry)
191+
local res = {}
192+
hl_entry = hl_entry or self.conf.style
193+
if type(hl_entry) == "string" then
194+
local hl_name = self.meta.hl_base_name .. "1"
195+
api.nvim_set_hl(0, hl_name, { fg = hl_entry })
196+
res[1] = hl_name
197+
elseif type(hl_entry) == "table" and type(hl_entry[1]) == "string" then
198+
for idx, val in ipairs(hl_entry) do
199+
local hl_name = self.meta.hl_base_name .. idx
200+
api.nvim_set_hl(0, hl_name, { fg = val })
201+
res[idx] = hl_name
202+
end
203+
elseif type(hl_entry) == "table" and type(hl_entry[1]) == "table" then
204+
for idx, val in ipairs(hl_entry) do
205+
local hl_name = self.meta.hl_base_name .. idx
206+
api.nvim_set_hl(0, hl_name, val --[[@as vim.api.keyset.highlight]])
207+
res[idx] = hl_name
198208
end
199-
elseif value_type == "string" then
200-
-- such as style = {"#abcabc", "#cdefef"}
201-
api.nvim_set_hl(0, self.meta.hl_base_name .. idx, { fg = val })
209+
elseif type(hl_entry) == "function" then
210+
res = inner(hl_entry())
202211
end
203-
table.insert(self.meta.hl_name_list, self.meta.hl_base_name .. idx)
212+
return res
204213
end
214+
215+
local res = inner()
216+
self.meta.hl_name_list = res
205217
end
206218

207219
function BaseMod:clearHl()

lua/hlchunk/mods/indent/init.lua

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ local fn = vim.fn
1212
local ROWS_INDENT_RETCODE = indentHelper.ROWS_INDENT_RETCODE
1313

1414
---@class HlChunk.IndentMetaInfo : HlChunk.MetaInfo
15-
---@field pre_leftcol number
1615

1716
local constructor = function(self, conf, meta)
1817
local default_meta = {
@@ -21,7 +20,6 @@ local constructor = function(self, conf, meta)
2120
hl_base_name = "HLIndent",
2221
ns_id = api.nvim_create_namespace("indent"),
2322
shiftwidth = fn.shiftwidth(),
24-
pre_leftcol = 0,
2523
leftcol = fn.winsaveview().leftcol,
2624
}
2725

@@ -157,8 +155,21 @@ function IndentMod:render(range, opts)
157155
self:setmark(bufnr, render_info)
158156
end
159157

160-
function IndentMod:createRenderCallback()
158+
function IndentMod:createThrottledCallback(callback)
159+
local throttledCallback = throttle(callback, self.conf.delay)
161160
return function(event, opts)
161+
opts = opts or { lazy = false }
162+
local bufnr = event.buf
163+
if not (api.nvim_buf_is_valid(bufnr) and self:shouldRender(bufnr)) then
164+
return
165+
end
166+
throttledCallback(event, opts)
167+
end
168+
end
169+
170+
function IndentMod:createAutocmd()
171+
BaseMod.createAutocmd(self)
172+
local throttledCallback = self:createThrottledCallback(function(event, opts)
162173
opts = opts or { lazy = false }
163174
local bufnr = event.buf
164175
if not self:shouldRender(bufnr) then
@@ -167,45 +178,23 @@ function IndentMod:createRenderCallback()
167178

168179
local wins = fn.win_findbuf(bufnr) or {}
169180
for _, winid in ipairs(wins) do
170-
local win_bufnr = api.nvim_win_get_buf(winid)
171-
local range = Scope(win_bufnr, fn.line("w0", winid) - 1, fn.line("w$", winid) - 1)
181+
local range = Scope(bufnr, fn.line("w0", winid) - 1, fn.line("w$", winid) - 1)
172182
local ahead_lines = self.conf.ahead_lines
173183
range.start = math.max(0, range.start - ahead_lines)
174-
range.finish = math.min(api.nvim_buf_line_count(win_bufnr) - 1, range.finish + ahead_lines)
184+
range.finish = math.min(api.nvim_buf_line_count(bufnr) - 1, range.finish + ahead_lines)
175185
api.nvim_win_call(winid, function()
176-
self.meta.shiftwidth = cFunc.get_sw(win_bufnr)
177-
self.meta.pre_leftcol = self.meta.leftcol
186+
self.meta.shiftwidth = cFunc.get_sw(bufnr)
178187
self.meta.leftcol = fn.winsaveview().leftcol
179-
if self.meta.pre_leftcol ~= self.meta.leftcol then
180-
opts.lazy = false
181-
end
182188
self:render(range, opts)
183189
end)
184190
end
185-
end
186-
end
187-
188-
function IndentMod:createThrottledCallback(callback)
189-
local throttledCallback = throttle(callback, self.conf.delay)
190-
return function(event, opts)
191-
opts = opts or { lazy = false }
192-
local bufnr = event.buf
193-
if not (api.nvim_buf_is_valid(bufnr) and self:shouldRender(bufnr)) then
194-
return
195-
end
196-
throttledCallback(event, opts)
197-
end
198-
end
199-
200-
function IndentMod:createAutocmd()
201-
BaseMod.createAutocmd(self)
202-
local renderCallback = self:createRenderCallback()
203-
local throttledCallback = self:createThrottledCallback(renderCallback)
191+
end)
204192

205193
local autocommands = {
206-
{ events = { "WinScrolled" }, opts = { lazy = true } },
194+
{ events = { "User" }, pattern = "WinScrolledX", opts = { lazy = false } },
195+
{ events = { "User" }, pattern = "WinScrolledY", opts = { lazy = true } },
207196
{ events = { "TextChanged", "TextChangedI", "BufWinEnter" }, opts = { lazy = false } },
208-
{ events = { "OptionSet" }, pattern = "list,listchars,shiftwidth,tabstop,expandtab", opts = {} },
197+
{ events = { "OptionSet" }, pattern = "list,shiftwidth,tabstop,expandtab", opts = { lazy = false } },
209198
}
210199

211200
for _, cmd in ipairs(autocommands) do

0 commit comments

Comments
 (0)