From e9372f32344978d1c195ea833dcb905220151e51 Mon Sep 17 00:00:00 2001 From: Devansh Sharma Date: Sat, 12 Apr 2025 07:54:11 +0530 Subject: [PATCH 1/3] feat: Add `TreePreOpen` and `TreePreClose` events --- lua/nvim-tree/events.lua | 12 ++++++++++++ lua/nvim-tree/lib.lua | 1 + lua/nvim-tree/view.lua | 2 ++ 3 files changed, 15 insertions(+) diff --git a/lua/nvim-tree/events.lua b/lua/nvim-tree/events.lua index 7b57333aee3..4dabc863451 100644 --- a/lua/nvim-tree/events.lua +++ b/lua/nvim-tree/events.lua @@ -8,7 +8,9 @@ M.Event = { Ready = "Ready", WillRenameNode = "WillRenameNode", NodeRenamed = "NodeRenamed", + TreePreOpen = "TreePreOpen", TreeOpen = "TreeOpen", + TreePreClose = "TreePreClose", TreeClose = "TreeClose", WillCreateFile = "WillCreateFile", FileCreated = "FileCreated", @@ -91,11 +93,21 @@ function M._dispatch_folder_removed(folder_name) dispatch(M.Event.FolderRemoved, { folder_name = folder_name }) end +--@private +function M._dispatch_on_tree_pre_open() + dispatch(M.Event.TreePreOpen, nil) +end + --@private function M._dispatch_on_tree_open() dispatch(M.Event.TreeOpen, nil) end +--@private +function M._dispatch_on_tree_pre_close() + dispatch(M.Event.TreePreClose, nil) +end + --@private function M._dispatch_on_tree_close() dispatch(M.Event.TreeClose, nil) diff --git a/lua/nvim-tree/lib.lua b/lua/nvim-tree/lib.lua index abd9d01e229..bb0c4be9faf 100644 --- a/lua/nvim-tree/lib.lua +++ b/lua/nvim-tree/lib.lua @@ -110,6 +110,7 @@ function M.open(opts) local explorer = core.get_explorer() + events._dispatch_on_tree_pre_open() if should_hijack_current_buf() then view.close_this_tab_only() view.open_in_win() diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index d50efffbcb3..ee94d9efd3e 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -238,6 +238,7 @@ local function close(tabpage) return end save_tab_state(tabpage) + events._dispatch_on_tree_pre_close() switch_buf_if_last_buf() local tree_win = M.get_winnr(tabpage) local current_win = vim.api.nvim_get_current_win() @@ -289,6 +290,7 @@ function M.open(options) local profile = log.profile_start("view open") + events._dispatch_on_tree_pre_open() create_buffer() open_window() M.resize() From ee6df66db7a2cfed40ee5e5a122b766f2275547f Mon Sep 17 00:00:00 2001 From: Devansh Sharma Date: Sat, 12 Apr 2025 08:01:32 +0530 Subject: [PATCH 2/3] docs: Update docs for `TreePreOpen` and `TreePreClose` events --- doc/nvim-tree-lua.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 2aa8422fe0d..2dea67b8683 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -2769,13 +2769,25 @@ e.g. handler for node renamed: >lua |nvim_tree_events_kind| - Event.Ready - When NvimTree has been initialized + When NvimTree has been initialized. + • Note: Handler takes no parameter. + +- Event.TreePreOpen + Invoked before the window and buffer for NvimTree are created + or opened. Before |Event.TreeOpen| event. • Note: Handler takes no parameter. - Event.TreeOpen + Invoked after the NvimTree is opened. + • Note: Handler takes no parameter. + +- Event.TreePreClose + Invoked before the window and buffer for NvimTree are closed. + Before |Event.TreeClose| event. • Note: Handler takes no parameter. - Event.TreeClose + Invoked after the NvimTree is closed. • Note: Handler takes no parameter. - Event.Resize - When NvimTree is resized. From 635bbf002388e2e634219a6c1a1a3e1565f3a3ce Mon Sep 17 00:00:00 2001 From: Devansh Sharma Date: Sun, 20 Apr 2025 13:15:04 +0530 Subject: [PATCH 3/3] chore: remove `TreePreClose` event and update dispatch of `TreePreOpen` --- doc/nvim-tree-lua.txt | 8 ++------ lua/nvim-tree/events.lua | 6 ------ lua/nvim-tree/lib.lua | 1 - lua/nvim-tree/view.lua | 2 +- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 2dea67b8683..6de645582e1 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -2781,13 +2781,9 @@ e.g. handler for node renamed: >lua Invoked after the NvimTree is opened. • Note: Handler takes no parameter. -- Event.TreePreClose - Invoked before the window and buffer for NvimTree are closed. - Before |Event.TreeClose| event. - • Note: Handler takes no parameter. - - Event.TreeClose - Invoked after the NvimTree is closed. + Invoked after the NvimTree is closed, but before the window is + closed. Dispatched on |WinClosed| event for NvimTree window. • Note: Handler takes no parameter. - Event.Resize - When NvimTree is resized. diff --git a/lua/nvim-tree/events.lua b/lua/nvim-tree/events.lua index 4dabc863451..e9dde833ba4 100644 --- a/lua/nvim-tree/events.lua +++ b/lua/nvim-tree/events.lua @@ -10,7 +10,6 @@ M.Event = { NodeRenamed = "NodeRenamed", TreePreOpen = "TreePreOpen", TreeOpen = "TreeOpen", - TreePreClose = "TreePreClose", TreeClose = "TreeClose", WillCreateFile = "WillCreateFile", FileCreated = "FileCreated", @@ -103,11 +102,6 @@ function M._dispatch_on_tree_open() dispatch(M.Event.TreeOpen, nil) end ---@private -function M._dispatch_on_tree_pre_close() - dispatch(M.Event.TreePreClose, nil) -end - --@private function M._dispatch_on_tree_close() dispatch(M.Event.TreeClose, nil) diff --git a/lua/nvim-tree/lib.lua b/lua/nvim-tree/lib.lua index bfdb9d80434..a464edf39ba 100644 --- a/lua/nvim-tree/lib.lua +++ b/lua/nvim-tree/lib.lua @@ -109,7 +109,6 @@ function M.open(opts) local explorer = core.get_explorer() - events._dispatch_on_tree_pre_open() if should_hijack_current_buf() then view.close_this_tab_only() view.open_in_win() diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index ce9d707a44e..41b98873ee2 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -238,7 +238,6 @@ local function close(tabpage) return end save_tab_state(tabpage) - events._dispatch_on_tree_pre_close() switch_buf_if_last_buf() local tree_win = M.get_winnr(tabpage) local current_win = vim.api.nvim_get_current_win() @@ -415,6 +414,7 @@ end ---@param opts OpenInWinOpts|nil function M.open_in_win(opts) opts = opts or { hijack_current_buf = true, resize = true } + events._dispatch_on_tree_pre_open() if opts.winid and vim.api.nvim_win_is_valid(opts.winid) then vim.api.nvim_set_current_win(opts.winid) end