fix(#1785): retain focused node on filter toggles (#2202)

* feat(live-filter): focus selected node after clear

* fix(#1785): retain focused node on filter toggle

* fix(#1785): apply requested changes

* fix(live-filter): focus last focused node when cleared on prompt

* refactor: store last focused node in `view` module

* refactor: store last focused node in view module

---------

Co-authored-by: Alexander Courtis <alex@courtis.org>
This commit is contained in:
Azad 2023-05-27 05:47:36 +02:00 committed by GitHub
parent 9ef6c3cd88
commit d5d6950a0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 5 deletions

View File

@ -1,31 +1,57 @@
local lib = require "nvim-tree.lib"
local core = require "nvim-tree.core"
local utils = require "nvim-tree.utils"
local filters = require "nvim-tree.explorer.filters"
local reloaders = require "nvim-tree.actions.reloaders.reloaders"
local M = {}
local function reload()
local node = lib.get_node_at_cursor()
reloaders.reload_explorer()
local explorer = core.get_explorer()
if explorer == nil then
return
end
while node do
local found_node, _ = utils.find_node(explorer.nodes, function(node_)
return node_.absolute_path == node.absolute_path
end)
if found_node or node.parent == nil then
utils.focus_file(node.absolute_path)
break
end
node = node.parent
end
end
function M.custom()
filters.config.filter_custom = not filters.config.filter_custom
return reloaders.reload_explorer()
reload()
end
function M.git_ignored()
filters.config.filter_git_ignored = not filters.config.filter_git_ignored
return reloaders.reload_explorer()
reload()
end
function M.git_clean()
filters.config.filter_git_clean = not filters.config.filter_git_clean
return reloaders.reload_explorer()
reload()
end
function M.no_buffer()
filters.config.filter_no_buffer = not filters.config.filter_no_buffer
return reloaders.reload_explorer()
reload()
end
function M.dotfiles()
filters.config.filter_dotfiles = not filters.config.filter_dotfiles
return reloaders.reload_explorer()
reload()
end
return M

View File

@ -134,6 +134,7 @@ local function create_overlay()
end
function M.start_filtering()
view.View.live_filter.prev_focused_node = require("nvim-tree.lib").get_node_at_cursor()
M.filter = M.filter or ""
redraw()
@ -145,9 +146,18 @@ function M.start_filtering()
end
function M.clear_filter()
local node = require("nvim-tree.lib").get_node_at_cursor()
local last_node = view.View.live_filter.prev_focused_node
M.filter = nil
reset_filter()
redraw()
if node then
utils.focus_file(node.absolute_path)
elseif last_node then
utils.focus_file(last_node.absolute_path)
end
end
function M.setup(opts)

View File

@ -19,6 +19,9 @@ M.View = {
tabpages = {},
cursors = {},
hide_root_folder = false,
live_filter = {
prev_focused_node = nil,
},
winopts = {
relativenumber = false,
number = false,