Skip to content

Commit f075c91

Browse files
committed
Change trail signs from window-local to buffer-local
1 parent 183468f commit f075c91

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

lua/scrollview/signs/trail.lua

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,29 @@ function M.init(enable)
1616
highlight = 'ScrollViewTrail',
1717
priority = vim.g.scrollview_trail_priority,
1818
symbol = vim.g.scrollview_trail_symbol,
19-
type = 'w',
2019
})
2120
local name = registration.name
2221
scrollview.set_sign_group_state(group, enable)
2322

2423
scrollview.set_sign_group_callback(group, function()
24+
-- Track visited buffers, to prevent duplicate computation when multiple
25+
-- windows are showing the same buffer.
26+
local visited = {}
2527
for _, winid in ipairs(scrollview.get_sign_eligible_windows()) do
26-
local winvars = vim.w[winid]
28+
local bufnr = api.nvim_win_get_buf(winid)
2729
-- Don't update when in insert mode. This way, pressing 'o' to start a
2830
-- new line won't trigger a new sign when there is indentation.
2931
local mode = api.nvim_win_call(winid, fn.mode)
30-
if mode ~= 'i' then
32+
if not visited[bufnr] and mode ~= 'i' then
33+
local bufvars = vim.b[bufnr]
3134
local lines = {}
32-
local bufnr = api.nvim_win_get_buf(winid)
3335
local changedtick = vim.b[bufnr].changedtick
34-
local changedtick_cached = winvars.scrollview_trail_changedtick_cached
35-
local bufnr_cached = winvars.scrollview_trail_bufnr_cached
36+
local changedtick_cached = bufvars.scrollview_trail_changedtick_cached
37+
local bufnr_cached = bufvars.scrollview_trail_bufnr_cached
3638
local cache_hit = changedtick_cached == changedtick
3739
and bufnr_cached == bufnr
3840
if cache_hit then
39-
lines = winvars.scrollview_trail_cached
41+
lines = bufvars.scrollview_trail_cached
4042
else
4143
local line_count = api.nvim_buf_line_count(bufnr)
4244
for line = 1, line_count do
@@ -46,14 +48,15 @@ function M.init(enable)
4648
end
4749
end
4850
-- luacheck: ignore 122 (setting read-only field w.?.? of global vim)
49-
winvars.scrollview_trail_changedtick_cached = changedtick
51+
bufvars.scrollview_trail_changedtick_cached = changedtick
5052
-- luacheck: ignore 122 (setting read-only field w.?.? of global vim)
51-
winvars.scrollview_trail_bufnr_cached = bufnr
53+
bufvars.scrollview_trail_bufnr_cached = bufnr
5254
-- luacheck: ignore 122 (setting read-only field w.?.? of global vim)
53-
winvars.scrollview_trail_cached = lines
55+
bufvars.scrollview_trail_cached = lines
5456
end
5557
-- luacheck: ignore 122 (setting read-only field w.?.? of global vim)
56-
winvars[name] = lines
58+
bufvars[name] = lines
59+
visited[bufnr] = true
5760
end
5861
end
5962
end)

0 commit comments

Comments
 (0)