diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 2aa8422fe0d..6de645582e1 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 7b57333aee3..e9dde833ba4 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 94cf2987dd2..41b98873ee2 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