# HG changeset patch # User Bram Moolenaar # Date 1636807503 -3600 # Node ID d4d9c7c55a5f2ee2f63ad2e47963dda5b4548164 # Parent 9007076c18da1f788207dfd7b35bf8950687fc89 patch 8.2.3591: no event is triggered when closing a window Commit: https://github.com/vim/vim/commit/23beefed73aadb243fb67cf944e3d60fe8c038bb Author: naohiro ono Date: Sat Nov 13 12:38:49 2021 +0000 patch 8.2.3591: no event is triggered when closing a window Problem: No event is triggered when closing a window. Solution: Add the WinClosed event. (Naohiro Ono, closes https://github.com/vim/vim/issues/9110) diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -348,6 +348,7 @@ Name triggered by ~ |WinNew| after creating a new window |TabNew| after creating a new tab page +|WinClosed| after closing a window |TabClosed| after closing a tab page |WinEnter| after entering another window |WinLeave| before leaving a window @@ -1280,6 +1281,12 @@ VimResume When the Vim instance is res VimSuspend When the Vim instance is suspended. Only when CTRL-Z was typed inside Vim, not when the SIGSTOP or SIGTSTP signal was sent to Vim. + *WinClosed* +WinClosed After closing a window. The pattern is + matched against the |window-ID|. Both + and are set to the + |window-ID|. Non-recursive (event cannot + trigger itself). *WinEnter* WinEnter After entering another window. Not done for the first window, when Vim has just started. diff --git a/src/autocmd.c b/src/autocmd.c --- a/src/autocmd.c +++ b/src/autocmd.c @@ -186,6 +186,7 @@ static struct event_name {"VimLeave", EVENT_VIMLEAVE}, {"VimLeavePre", EVENT_VIMLEAVEPRE}, {"WinNew", EVENT_WINNEW}, + {"WinClosed", EVENT_WINCLOSED}, {"WinEnter", EVENT_WINENTER}, {"WinLeave", EVENT_WINLEAVE}, {"VimResized", EVENT_VIMRESIZED}, @@ -2042,7 +2043,8 @@ apply_autocmds_group( || event == EVENT_OPTIONSET || event == EVENT_QUICKFIXCMDPOST || event == EVENT_DIRCHANGED - || event == EVENT_MODECHANGED) + || event == EVENT_MODECHANGED + || event == EVENT_WINCLOSED) { fname = vim_strsave(fname); autocmd_fname_full = TRUE; // don't expand it later diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index 8161183dc8447e718d2d344789686e777e5bd2ed..9eb718f9da4c6de08a925432b3702b9690a4f597 GIT binary patch literal 87212 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3591, +/**/ 3590, /**/ 3589, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1379,6 +1379,7 @@ enum auto_event EVENT_WINENTER, // after entering a window EVENT_WINLEAVE, // before leaving a window EVENT_WINNEW, // when entering a new window + EVENT_WINCLOSED, // after closing a window EVENT_VIMSUSPEND, // before Vim is suspended EVENT_VIMRESUME, // after Vim is resumed diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -19,6 +19,7 @@ static void win_exchange(long); static void win_rotate(int, int); static void win_totop(int size, int flags); static void win_equal_rec(win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height); +static void trigger_winclosed(win_T *win); static win_T *win_free_mem(win_T *win, int *dirp, tabpage_T *tp); static frame_T *win_altframe(win_T *win, tabpage_T *tp); static tabpage_T *alt_tabpage(void); @@ -2566,6 +2567,13 @@ win_close(win_T *win, int free_buf) if (popup_win_closed(win) && !win_valid(win)) return FAIL; #endif + + // Trigger WinClosed just before starting to free window-related resources. + trigger_winclosed(win); + // autocmd may have freed the window already. + if (!win_valid_any_tab(win)) + return OK; + win_close_buffer(win, free_buf ? DOBUF_UNLOAD : 0, TRUE); if (only_one_window() && win_valid(win) && win->w_buffer == NULL @@ -2710,6 +2718,20 @@ win_close(win_T *win, int free_buf) return OK; } + static void +trigger_winclosed(win_T *win) +{ + static int recursive = FALSE; + char_u winid[NUMBUFLEN]; + + if (recursive) + return; + recursive = TRUE; + vim_snprintf((char *)winid, sizeof(winid), "%i", win->w_id); + apply_autocmds(EVENT_WINCLOSED, winid, winid, FALSE, win->w_buffer); + recursive = FALSE; +} + /* * Close window "win" in tab page "tp", which is not the current tab page. * This may be the last window in that tab page and result in closing the tab, @@ -2731,6 +2753,12 @@ win_close_othertab(win_T *win, int free_ && win->w_buffer->b_locked > 0)) return; // window is already being closed + // Trigger WinClosed just before starting to free window-related resources. + trigger_winclosed(win); + // autocmd may have freed the window already. + if (!win_valid_any_tab(win)) + return; + if (win->w_buffer != NULL) // Close the link to the buffer. close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0,