Charles E Campbell Jr wrote:
Just a suggestion -- I'd appreciate a WinClose event. BufWinLeave would almost do, but if two or more windows are open on the same buffer, then no event. WinLeave fires whenever one changes windows, which isn't what I want, either. Unless I'm misunderstanding the help for these two events.
I've attached a patch. It implements WinClose and WinResize. However, I didn't find where the resizing occurs when a mouse is used to drag a window frame, so that's a "known bug". I'd do the documentation up but I'd like to find out if Bram is receptive first.
Regards, Chip Campbell
*** old_fileio.cc 2006-09-25 15:28:48.000000000 -0400 --- fileio.c 2006-09-25 15:28:51.000000000 -0400 *************** *** 7008,7015 **** --- 7008,7017 ---- {"VimEnter", EVENT_VIMENTER}, {"VimLeave", EVENT_VIMLEAVE}, {"VimLeavePre", EVENT_VIMLEAVEPRE}, + {"WinClose", EVENT_WINCLOSE}, {"WinEnter", EVENT_WINENTER}, {"WinLeave", EVENT_WINLEAVE}, + {"WinResize", EVENT_WINRESIZE}, {"VimResized", EVENT_VIMRESIZED}, {NULL, (event_T)0} }; *** old_window.cc 2006-09-25 15:00:05.000000000 -0400 --- window.c 2006-09-25 15:48:15.000000000 -0400 *************** *** 1587,1592 **** --- 1587,1595 ---- win_equal_rec(next_curwin == NULL ? curwin : next_curwin, current, topframe, dir, 0, tabline_height(), (int)Columns, topframe->fr_height); + #ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_WINRESIZE, NULL, NULL, FALSE, curbuf); + #endif } /* *************** *** 2068,2073 **** --- 2071,2077 ---- return; # endif } + apply_autocmds(EVENT_WINCLOSE, NULL, NULL, FALSE, curbuf); #endif /* *************** *** 4534,4539 **** --- 4538,4546 ---- msg_row = row; msg_col = 0; + #ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_WINRESIZE, NULL, NULL, FALSE, curbuf); + #endif redraw_all_later(NOT_VALID); } *** old_vim.hh 2006-09-25 14:55:08.000000000 -0400 --- vim.h 2006-09-25 15:27:47.000000000 -0400 *************** *** 1138,1145 **** --- 1138,1147 ---- EVENT_VIMLEAVE, /* before exiting Vim */ EVENT_VIMLEAVEPRE, /* before exiting Vim and writing .viminfo */ EVENT_VIMRESIZED, /* after Vim window was resized */ + EVENT_WINCLOSE, /* after closing a window */ EVENT_WINENTER, /* after entering a window */ EVENT_WINLEAVE, /* before leaving a window */ + EVENT_WINRESIZE, /* after resizing a window */ EVENT_ENCODINGCHANGED, /* after changing the 'encoding' option */ EVENT_CURSORHOLD, /* cursor in same position for a while */ EVENT_CURSORHOLDI, /* idem, in Insert mode */