local M = {} ---@param buf number? function M.bufremove(buf) buf = buf or 0 buf = buf == 0 and vim.api.nvim_get_current_buf() or buf if vim.bo.modified then local choice = vim.fn.confirm(('Save changes to %q?'):format(vim.fn.bufname()), '&Yes\n&No\n&Cancel') if choice == 0 or choice == 3 then -- 0 for / and 3 for Cancel return end if choice == 1 then -- Yes vim.cmd.write() end end for _, win in ipairs(vim.fn.win_findbuf(buf)) do vim.api.nvim_win_call(win, function() if not vim.api.nvim_win_is_valid(win) or vim.api.nvim_win_get_buf(win) ~= buf then return end -- Try using alternate buffer local alt = vim.fn.bufnr '#' if alt ~= buf and vim.fn.buflisted(alt) == 1 then vim.api.nvim_win_set_buf(win, alt) return end -- Try using previous buffer local has_previous = pcall(vim.cmd, 'bprevious') if has_previous and buf ~= vim.api.nvim_win_get_buf(win) then return end -- Create new listed buffer local new_buf = vim.api.nvim_create_buf(true, false) vim.api.nvim_win_set_buf(win, new_buf) end) end if vim.api.nvim_buf_is_valid(buf) then pcall(vim.cmd, 'bdelete! ' .. buf) end end function M.treefocus() local buf = vim.api.nvim_get_current_buf() local bufname = vim.api.nvim_buf_get_name(buf) if vim.fn.isdirectory(bufname) or vim.fn.isfile(bufname) then require('nvim-tree.api').tree.find_file(vim.fn.expand '%:p') end end return M