mirror of
https://github.com/neovim/neovim.git
synced 2025-10-04 08:56:29 +00:00
fix(window): :close crash if WinClosed from float closes window (#27794)
Problem: :close crash if WinClosed from float closes window. Solution: Check if window has already been closed.
This commit is contained in:
@@ -2560,6 +2560,7 @@ static bool close_last_window_tabpage(win_T *win, bool free_buf, bool force, tab
|
||||
emsg(_("E814: Cannot close window, only autocmd window would remain"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (force || can_close_floating_windows()) {
|
||||
// close the last window until the there are no floating windows
|
||||
while (lastwin->w_floating) {
|
||||
@@ -2573,6 +2574,10 @@ static bool close_last_window_tabpage(win_T *win, bool free_buf, bool force, tab
|
||||
emsg(e_floatonly);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!win_valid_any_tab(win)) {
|
||||
return true; // window already closed by autocommands
|
||||
}
|
||||
}
|
||||
|
||||
buf_T *old_curbuf = curbuf;
|
||||
@@ -2591,10 +2596,6 @@ static bool close_last_window_tabpage(win_T *win, bool free_buf, bool force, tab
|
||||
// that below.
|
||||
goto_tabpage_tp(alt_tabpage(), false, true);
|
||||
|
||||
// save index for tabclosed event
|
||||
char prev_idx[NUMBUFLEN];
|
||||
snprintf(prev_idx, NUMBUFLEN, "%i", tabpage_index(prev_curtab));
|
||||
|
||||
// Safety check: Autocommands may have closed the window when jumping
|
||||
// to the other tab page.
|
||||
if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win) {
|
||||
|
Reference in New Issue
Block a user