From c24c0470d9de277fbebecd718f33561ed7c90298 Mon Sep 17 00:00:00 2001 From: Devansh Sharma <21225957+devansh08@users.noreply.github.com> Date: Mon, 21 Apr 2025 04:09:48 +0530 Subject: [PATCH] feat: add TreePreOpen event (#3105) * feat: Add `TreePreOpen` and `TreePreClose` events * docs: Update docs for `TreePreOpen` and `TreePreClose` events * chore: remove `TreePreClose` event and update dispatch of `TreePreOpen` --------- Co-authored-by: Alexander Courtis --- doc/nvim-tree-lua.txt | 10 +++++++++- lua/nvim-tree/events.lua | 6 ++++++ lua/nvim-tree/view.lua | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 2aa8422f..6de64558 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -2769,13 +2769,21 @@ 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.TreeClose + 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 7b57333a..e9dde833 100644 --- a/lua/nvim-tree/events.lua +++ b/lua/nvim-tree/events.lua @@ -8,6 +8,7 @@ M.Event = { Ready = "Ready", WillRenameNode = "WillRenameNode", NodeRenamed = "NodeRenamed", + TreePreOpen = "TreePreOpen", TreeOpen = "TreeOpen", TreeClose = "TreeClose", WillCreateFile = "WillCreateFile", @@ -91,6 +92,11 @@ 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) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 94cf2987..41b98873 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -288,6 +288,7 @@ function M.open(options) local profile = log.profile_start("view open") + events._dispatch_on_tree_pre_open() create_buffer() open_window() M.resize() @@ -413,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