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