Run the following script named nwindows.vim and call Nwindows() with an
argument of 0 or 1:
gvim -u NONE -S nwindows.vim
:call Nwindows(1) ---> BufWinLeave events (there should be no
BufWinLeave event): 1
:call Nwindows(0) ---> BufWinLeave events (there should be no
BufWinLeave event): 0
The following patch fixes the problem by not ignoring the result of the actions
of EVENT_BUFNEW and EVENT_BUFADD autocommands in buflist_new() when called by
do_ecmd().
This patch may have side effects, but may be useful in describing what is
causing the problem.
The comment "/* buf->b_nwindows = 0; why was this here? */" in buffer.c is very
old ('hg blame' says before 2004).
============== nwindows.vim ==============
" Split the window in the BufAdd event when 'autocmd_split' is true.
function Nwindows(autocmd_split)
augroup nwindows
" Count the number of BufWinLeave events.
autocmd BufWinLeave foobar let g:nwindows = g:nwindows + 1
if a:autocmd_split
autocmd BufAdd foobar wincmd s
endif
augroup END
let g:nwindows = 0
edit foobar
if ! a:autocmd_split
wincmd s
endif
edit foo
echo "BufWinLeave events (there should be no BufWinLeave event): " .
g:nwindows
call input("Press the <Enter> key to continue.")
qa
endfunction
============== patch ==============
diff --git a/src/buffer.c b/src/buffer.c
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1794,7 +1794,7 @@
if (aborting()) /* autocmds may abort script processing */
return NULL;
#endif
- /* buf->b_nwindows = 0; why was this here? */
+ buf->b_nwindows = 0;
free_buffer_stuff(buf, FALSE); /* delete local variables et al. */
/* Init the options. */
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3373,10 +3373,7 @@
if (buf == NULL)
goto theend;
if (buf->b_ml.ml_mfp == NULL) /* no memfile yet */
- {
oldbuf = FALSE;
- buf->b_nwindows = 0;
- }
else /* existing memfile */
{
oldbuf = TRUE;
==========================================
-- Xavier
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.