fix(scroll): don't animate for new changedtick. Fixes #384

This commit is contained in:
Folke Lemaitre 2025-01-06 16:55:18 +01:00
parent 7dcdcb0b6a
commit ac8b3cdfa0
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040

View file

@ -17,6 +17,7 @@ M.meta = {
---@field target vim.fn.winsaveview.ret
---@field scrolloff number
---@field virtualedit? string
---@field changedtick number
---@class snacks.scroll.Config
---@field animate snacks.animate.Config
@ -62,14 +63,16 @@ local function get_state(win)
if not Snacks.animate.enabled({ buf = buf, name = "scroll" }) then
return
end
local changedtick = vim.api.nvim_buf_get_changedtick(buf)
local view = vim.api.nvim_win_call(win, vim.fn.winsaveview) ---@type vim.fn.winsaveview.ret
if not (states[win] and states[win].buf == buf) then
if not (states[win] and states[win].buf == buf and states[win].changedtick == changedtick) then
---@diagnostic disable-next-line: missing-fields
states[win] = {
win = win,
target = vim.deepcopy(view),
current = vim.deepcopy(view),
buf = buf,
changedtick = changedtick,
}
end
states[win].scrolloff = vim.wo[win].scrolloff