aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/buffer.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-03-21 23:38:48 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-03-23 09:07:21 +0800
commit3fdb7b528d9d066ccce8b1cb5d2225c338acfbb8 (patch)
tree46029d4cf13bede47125520e8beff3d6e2be81f7 /src/nvim/buffer.c
parent3539456f4923b4afbc7fa160aabf19c07108758f (diff)
downloadrneovim-3fdb7b528d9d066ccce8b1cb5d2225c338acfbb8.tar.gz
rneovim-3fdb7b528d9d066ccce8b1cb5d2225c338acfbb8.tar.bz2
rneovim-3fdb7b528d9d066ccce8b1cb5d2225c338acfbb8.zip
fix(float): handle buffer deletion with floating windows
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r--src/nvim/buffer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index 1293edb1da..1fe80dc24c 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1042,6 +1042,10 @@ static int empty_curbuf(int close_others, int forceit, int action)
set_bufref(&bufref, buf);
if (close_others) {
+ if (curwin->w_floating) {
+ // Last window must be non-floating.
+ curwin = firstwin;
+ }
// Close any other windows on this buffer, then make it empty.
close_windows(buf, true);
}
@@ -1224,11 +1228,12 @@ int do_buffer(int action, int start, int dir, int count, int forceit)
}
// If the deleted buffer is the current one, close the current window
- // (unless it's the only window). Repeat this so long as we end up in
- // a window with this buffer.
+ // (unless it's the only non-floating window).
+ // When the autocommand window is involved win_close() may need to print an error message.
+ // Repeat this so long as we end up in a window with this buffer.
while (buf == curbuf
&& !(curwin->w_closing || curwin->w_buffer->b_locked > 0)
- && (!ONE_WINDOW || first_tabpage->tp_next != NULL)) {
+ && (lastwin == aucmd_win || !last_window(curwin))) {
if (win_close(curwin, false, false) == FAIL) {
break;
}