feat(util): mini.bufremove is no longer needed

This commit is contained in:
Folke Lemaitre 2024-05-17 10:10:28 +02:00
parent 87493af237
commit 779de263f1
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
4 changed files with 47 additions and 28 deletions

View file

@ -208,4 +208,43 @@ function M.foldexpr()
return "0"
end
function M.bufremove()
local buf = vim.api.nvim_get_current_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 then -- 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
vim.api.nvim_buf_delete(buf, { force = true })
end
return M