From 03c55009664b06ea9ec0158c38a8ff861a6628e7 Mon Sep 17 00:00:00 2001 From: Jonathan Apodaca Date: Sat, 12 Oct 2024 14:08:39 -0600 Subject: [PATCH] (State) add track_winview() --- lua/tt/range.lua | 1 + lua/tt/state.lua | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lua/tt/range.lua b/lua/tt/range.lua index 64e87c3..09569dd 100644 --- a/lua/tt/range.lua +++ b/lua/tt/range.lua @@ -104,6 +104,7 @@ function Range.from_text_object(text_obj, opts) local positions vim.api.nvim_buf_call(opts.buf, function() positions = State.run(0, function(s) + s:track_winview() s:track_register '"' s:track_pos '.' s:track_pos "'[" diff --git a/lua/tt/state.lua b/lua/tt/state.lua index e7fae8c..882fc56 100644 --- a/lua/tt/state.lua +++ b/lua/tt/state.lua @@ -5,6 +5,7 @@ ---@field positions table ---@field keymaps { mode: string; lhs: any, rhs: any, buffer?: number }[] ---@field global_options table +---@field win_view vim.fn.winsaveview.ret|nil local State = {} ---@param buf number @@ -65,6 +66,8 @@ function State:track_pos(pos) self.positions[pos] = vim.fn.getpos(pos) end ---@param nm string function State:track_global_option(nm) self.global_options[nm] = vim.g[nm] end +function State:track_winview() self.win_view = vim.fn.winsaveview() end + function State:restore() for reg, val in pairs(self.registers) do vim.fn.setreg(reg, val) @@ -81,6 +84,7 @@ function State:restore() for nm, val in pairs(self.global_options) do vim.g[nm] = val end + if self.win_view ~= nil then vim.fn.winrestview(self.win_view) end end return State