diff --git a/lua/nvim-tree/actions/tree-modifiers/toggles.lua b/lua/nvim-tree/actions/tree-modifiers/toggles.lua index 1c2687eb018..0904b606559 100644 --- a/lua/nvim-tree/actions/tree-modifiers/toggles.lua +++ b/lua/nvim-tree/actions/tree-modifiers/toggles.lua @@ -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 diff --git a/lua/nvim-tree/live-filter.lua b/lua/nvim-tree/live-filter.lua index df28911c45a..8a890fee211 100644 --- a/lua/nvim-tree/live-filter.lua +++ b/lua/nvim-tree/live-filter.lua @@ -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) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 2cbaf9db41b..c2e7b72f02c 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -19,6 +19,9 @@ M.View = { tabpages = {}, cursors = {}, hide_root_folder = false, + live_filter = { + prev_focused_node = nil, + }, winopts = { relativenumber = false, number = false,