From b117111cc24c4ef98b3617bb0f8d8acf3d1eb594 Mon Sep 17 00:00:00 2001 From: Igor Date: Fri, 12 Jun 2026 00:22:19 -0300 Subject: [PATCH 1/3] feat: restore buffers after loading a session --- lua/nvim-tree/autocmd.lua | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lua/nvim-tree/autocmd.lua b/lua/nvim-tree/autocmd.lua index 2056927ffc0..258f11cc84d 100644 --- a/lua/nvim-tree/autocmd.lua +++ b/lua/nvim-tree/autocmd.lua @@ -17,6 +17,41 @@ function M.global() end, }) + vim.api.nvim_create_autocmd("SessionLoadPost", { + group = augroup_id, + callback = function() + local api = require("nvim-tree.api").tree + + ---@type table + local tabs = {} + + for _, tab in ipairs(vim.api.nvim_list_tabpages()) do + for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do + local buf = vim.api.nvim_win_get_buf(win) + if api.is_tree_buf(buf) then + tabs[tab] = true + end + end + end + + vim.schedule(function() + api.close_in_all_tabs() + + for tab, _ in pairs(tabs) do + if vim.api.nvim_tabpage_is_valid(tab) then + local win = vim.api.nvim_tabpage_get_win(tab) + + if vim.api.nvim_win_is_valid(win) then + vim.api.nvim_win_call(win, function() + api.open() + end) + end + end + end + end) + end, + }) + if config.g.tab.sync.open then vim.api.nvim_create_autocmd("TabEnter", { group = augroup_id, From f682e88b762725c2dcc55e238fd37664fb6971cd Mon Sep 17 00:00:00 2001 From: Igor Date: Thu, 18 Jun 2026 23:27:38 -0300 Subject: [PATCH 2/3] feat: restore cwd --- lua/nvim-tree/autocmd.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/autocmd.lua b/lua/nvim-tree/autocmd.lua index 258f11cc84d..2f6c6d9b273 100644 --- a/lua/nvim-tree/autocmd.lua +++ b/lua/nvim-tree/autocmd.lua @@ -17,6 +17,16 @@ function M.global() end, }) + if vim.fn.has("nvim-0.13") == 1 then + vim.api.nvim_create_autocmd("SessionWritePre", { + group = augroup_id, + callback = function() + local cwd = require("nvim-tree.core").get_cwd() + vim.g.NvimTreeState = vim.json.encode({ cwd = cwd }) + end, + }) + end + vim.api.nvim_create_autocmd("SessionLoadPost", { group = augroup_id, callback = function() @@ -25,6 +35,9 @@ function M.global() ---@type table local tabs = {} + local session_state = vim.json.decode(vim.g.NvimTreeState or "{}") or {} + local path = session_state and session_state.cwd or nil + for _, tab in ipairs(vim.api.nvim_list_tabpages()) do for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do local buf = vim.api.nvim_win_get_buf(win) @@ -43,7 +56,7 @@ function M.global() if vim.api.nvim_win_is_valid(win) then vim.api.nvim_win_call(win, function() - api.open() + api.open({ path = path }) end) end end From 447c25cf96d389120e6d3d24cdabcfd029da1341 Mon Sep 17 00:00:00 2001 From: Igor Date: Sat, 20 Jun 2026 00:07:21 -0300 Subject: [PATCH 3/3] chore: ignore type mismatch --- lua/nvim-tree/autocmd.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/nvim-tree/autocmd.lua b/lua/nvim-tree/autocmd.lua index 2f6c6d9b273..372f34350f2 100644 --- a/lua/nvim-tree/autocmd.lua +++ b/lua/nvim-tree/autocmd.lua @@ -18,7 +18,7 @@ function M.global() }) if vim.fn.has("nvim-0.13") == 1 then - vim.api.nvim_create_autocmd("SessionWritePre", { + vim.api.nvim_create_autocmd("SessionWritePre", { ---@diagnostic disable-line: param-type-mismatch group = augroup_id, callback = function() local cwd = require("nvim-tree.core").get_cwd()