From d9aaa2f985c69ae1452e067e33e8a11ec84196a1 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sun, 19 Jun 2022 17:51:01 +1000 Subject: [PATCH] fix(#1356): view.close switch_buf_if_last_buf prefers alt buf (#1357) --- lua/nvim-tree/view.lua | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index fc90d297..e4e193f3 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -130,16 +130,31 @@ local function open_window() set_window_options_and_buffer() end -local function get_existing_buffers() - return vim.tbl_filter(function(buf) - return a.nvim_buf_is_valid(buf) and vim.fn.buflisted(buf) == 1 - end, a.nvim_list_bufs()) +local function is_buf_displayed(buf) + return a.nvim_buf_is_valid(buf) and vim.fn.buflisted(buf) == 1 +end + +local function get_alt_or_next_buf() + local alt_buf = vim.fn.bufnr "#" + if is_buf_displayed(alt_buf) then + return alt_buf + end + + local next_buf = nil + for _, buf in ipairs(a.nvim_list_bufs()) do + if is_buf_displayed(buf) then + next_buf = next_buf or buf + end + end + + return next_buf end local function switch_buf_if_last_buf() if #a.nvim_list_wins() == 1 then - if #get_existing_buffers() > 0 then - vim.cmd "sbnext" + local buf = get_alt_or_next_buf() + if buf then + vim.cmd("sb" .. buf) else vim.cmd "new" end