diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua index 3371f66c31..f336a22c7a 100644 --- a/runtime/lua/vim/pack.lua +++ b/runtime/lua/vim/pack.lua @@ -1122,6 +1122,7 @@ local function show_confirm_buf(lines, on_finish) local win_id = api.nvim_get_current_win() local delete_buffer = vim.schedule_wrap(function() + pcall(api.nvim_win_close, win_id, true) pcall(api.nvim_buf_delete, bufnr, { force = true }) vim.cmd.redraw() end) diff --git a/test/functional/plugin/pack_spec.lua b/test/functional/plugin/pack_spec.lua index d062a53b76..c63769b82f 100644 --- a/test/functional/plugin/pack_spec.lua +++ b/test/functional/plugin/pack_spec.lua @@ -1397,6 +1397,16 @@ describe('vim.pack', function() n.exec('tabonly') n.exec('write') eq('', n.eval('v:errmsg')) + + -- Should cleanly close tabpage even if there are only scratch buffers + n.exec('%bwipeout') + local init_buf = api.nvim_get_current_buf() + api.nvim_set_current_buf(api.nvim_create_buf(false, true)) + api.nvim_buf_delete(init_buf, { force = true }) + exec_lua('vim.pack.update()') + n.exec('write') + eq(1, #api.nvim_list_tabpages()) + eq(1, #api.nvim_list_bufs()) end) it('has in-process LSP features', function()