diff --git a/lua/neo-tree/ui/renderer.lua b/lua/neo-tree/ui/renderer.lua index 497033b1..b5067f6d 100644 --- a/lua/neo-tree/ui/renderer.lua +++ b/lua/neo-tree/ui/renderer.lua @@ -163,13 +163,15 @@ M.close = function(state, focus_prior_window) end state.winid = nil end - local bufnr = utils.get_value(state, "bufnr", 0, true) - state.bufnr = nil - vim.schedule(function() - if bufnr > 0 and vim.api.nvim_buf_is_valid(bufnr) then - vim.api.nvim_buf_delete(bufnr, { force = true }) - end - end) + if window_existed then + local bufnr = utils.get_value(state, "bufnr", 0, true) + state.bufnr = nil + vim.schedule(function() + if bufnr > 0 and vim.api.nvim_buf_is_valid(bufnr) then + vim.api.nvim_buf_delete(bufnr, { force = true }) + end + end) + end return window_existed end @@ -778,6 +780,7 @@ create_tree = function(state) state.tree = NuiTree({ ns_id = highlights.ns_id, winid = state.winid, + bufnr = state.bufnr, get_node_id = function(node) return node.id end, @@ -1010,6 +1013,9 @@ M.acquire_window = function(state) vim.api.nvim_win_set_buf(state.winid, state.bufnr) else close_old_window() + if state.bufnr and vim.api.nvim_buf_is_valid(state.bufnr) then + vim.api.nvim_buf_delete(state.bufnr, { force = true }) + end win = NuiSplit(win_options) win:mount() state.bufnr = win.bufnr @@ -1087,7 +1093,7 @@ M.window_exists = function(state) window_exists = false elseif position == "current" then window_exists = vim.api.nvim_win_is_valid(winid) - and vim.api.nvim_buf_is_valid(bufnr) + and vim.api.nvim_buf_is_loaded(bufnr) and vim.api.nvim_win_get_buf(winid) == bufnr else local isvalid = M.is_window_valid(winid)