* 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:
parent
9ef6c3cd88
commit
d5d6950a0d
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -19,6 +19,9 @@ M.View = {
|
||||
tabpages = {},
|
||||
cursors = {},
|
||||
hide_root_folder = false,
|
||||
live_filter = {
|
||||
prev_focused_node = nil,
|
||||
},
|
||||
winopts = {
|
||||
relativenumber = false,
|
||||
number = false,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user