summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buffer.c21
-rw-r--r--src/testdir/test_autocmd.vim23
-rw-r--r--src/version.c2
3 files changed, 26 insertions, 20 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 50aa9e8cc..461950307 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2068,10 +2068,9 @@ buflist_new(
buf = curbuf;
// It's like this buffer is deleted. Watch out for autocommands that
// change curbuf! If that happens, allocate a new buffer anyway.
- if (curbuf->b_p_bl)
- apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
- if (buf == curbuf)
- apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
+ buf_freeall(buf, BFA_WIPE | BFA_DEL);
+ if (buf != curbuf) // autocommands deleted the buffer!
+ return NULL;
#ifdef FEAT_EVAL
if (aborting()) // autocmds may abort script processing
{
@@ -2079,12 +2078,6 @@ buflist_new(
return NULL;
}
#endif
- if (buf == curbuf)
- {
- // Make sure 'bufhidden' and 'buftype' are empty
- clear_string_option(&buf->b_p_bh);
- clear_string_option(&buf->b_p_bt);
- }
}
if (buf != curbuf || curbuf == NULL)
{
@@ -2132,14 +2125,6 @@ buflist_new(
if (buf == curbuf)
{
- // free all things allocated for this buffer
- buf_freeall(buf, 0);
- if (buf != curbuf) // autocommands deleted the buffer!
- return NULL;
-#if defined(FEAT_EVAL)
- if (aborting()) // autocmds may abort script processing
- return NULL;
-#endif
free_buffer_stuff(buf, FALSE); // delete local variables et al.
// Init the options.
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index 724d0733f..fd3631791 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -3037,9 +3037,10 @@ func Test_autocmd_closing_cmdwin()
endfunc
func Test_autocmd_vimgrep()
+ %bwipe!
augroup aucmd_vimgrep
- au QuickfixCmdPre,BufNew,BufDelete,BufReadCmd * sb
- au QuickfixCmdPre,BufNew,BufDelete,BufReadCmd * q9
+ au QuickfixCmdPre,BufNew,BufReadCmd * sb
+ au QuickfixCmdPre,BufNew,BufReadCmd * q9
augroup END
%bwipe!
call assert_fails('lv ?a? foo', 'E926:')
@@ -3160,4 +3161,22 @@ func Test_v_event_readonly()
endfunc
+func Test_noname_autocmd()
+ augroup test_noname_autocmd_group
+ autocmd!
+ autocmd BufEnter * call add(s:li, ["BufEnter", expand("<afile>")])
+ autocmd BufDelete * call add(s:li, ["BufDelete", expand("<afile>")])
+ autocmd BufLeave * call add(s:li, ["BufLeave", expand("<afile>")])
+ autocmd BufUnload * call add(s:li, ["BufUnload", expand("<afile>")])
+ autocmd BufWipeout * call add(s:li, ["BufWipeout", expand("<afile>")])
+ augroup END
+
+ let s:li = []
+ edit foo
+ call assert_equal([['BufUnload', ''], ['BufDelete', ''], ['BufWipeout', ''], ['BufEnter', 'foo']], s:li)
+
+ au! test_noname_autocmd_group
+ augroup! test_noname_autocmd_group
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 9a76fdf38..b00e0e832 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4791,
+/**/
4790,
/**/
4789,