fix(treesitter): maintain cursor position when toggling anonymous nodes

When toggling anonymous nodes in the :InspectTree window, keep the
cursor fixed relative to the node within the tree. This prevents the
cursor from jumping.
This commit is contained in:
Gregory Anders 2023-03-02 14:06:11 -07:00
parent f449121764
commit 2eeafc43c4

View File

@ -506,8 +506,26 @@ function M.inspect_tree(opts)
a.nvim_buf_set_keymap(b, 'n', 'a', '', { a.nvim_buf_set_keymap(b, 'n', 'a', '', {
desc = 'Toggle anonymous nodes', desc = 'Toggle anonymous nodes',
callback = function() callback = function()
local row, col = unpack(a.nvim_win_get_cursor(w))
local curnode = pg:get(row)
while curnode and not curnode.named do
row = row - 1
curnode = pg:get(row)
end
pg.opts.anon = not pg.opts.anon pg.opts.anon = not pg.opts.anon
pg:draw(b) pg:draw(b)
if not curnode then
return
end
local id = curnode.id
for i, node in pg:iter() do
if node.id == id then
a.nvim_win_set_cursor(w, { i, col })
end
end
end, end,
}) })
a.nvim_buf_set_keymap(b, 'n', 'I', '', { a.nvim_buf_set_keymap(b, 'n', 'I', '', {