diff --git a/src/nvim/window.c b/src/nvim/window.c index f05cfca385..e1f29a62f3 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -3263,7 +3263,6 @@ bool win_close_othertab(win_T *win, int free_buf, tabpage_T *tp, bool force) } // Free the memory used for the window. - buf_T *buf = win->w_buffer; int dir; win_free_mem(win, &dir, tp); @@ -3276,7 +3275,8 @@ bool win_close_othertab(win_T *win, int free_buf, tabpage_T *tp, bool force) if (has_event(EVENT_TABCLOSED)) { char prev_idx[NUMBUFLEN]; vim_snprintf(prev_idx, NUMBUFLEN, "%i", free_tp_idx); - apply_autocmds(EVENT_TABCLOSED, prev_idx, prev_idx, false, buf); + apply_autocmds(EVENT_TABCLOSED, prev_idx, prev_idx, false, + bufref.br_buf && bufref_valid(&bufref) ? bufref.br_buf : curbuf); } } return true; diff --git a/test/functional/autocmd/tabclose_spec.lua b/test/functional/autocmd/tabclose_spec.lua index 3969f33cf1..b6f05ffcaa 100644 --- a/test/functional/autocmd/tabclose_spec.lua +++ b/test/functional/autocmd/tabclose_spec.lua @@ -59,13 +59,14 @@ describe('TabClosed', function() setlocal bufhidden=wipe tabnew au TabClosed * ++once let g:tp_valid = nvim_tabpage_is_valid(s:tp) + \| let g:curbuf = bufnr() \| let g:abuf = expand('') call nvim_buf_delete(g:buf, #{force: 1}) ]]) eq(false, eval('g:tp_valid')) eq(false, eval('nvim_buf_is_valid(g:buf)')) - eq('', eval('g:abuf')) + eq(eval('g:curbuf'), tonumber(eval('g:abuf'))) -- Falls back to curbuf. exec([[ tabnew