forked from aniani/vim
patch 8.2.4791: events triggered in different order when reusing buffer
Problem: Autocmd events triggered in different order when reusing an empty buffer. Solution: Call buff_freeall() earlier. (Charlie Groves, closes #10198)
This commit is contained in:
parent
c448e9c950
commit
fef4485ef5
21
src/buffer.c
21
src/buffer.c
@ -2068,10 +2068,9 @@ buflist_new(
|
|||||||
buf = curbuf;
|
buf = curbuf;
|
||||||
// It's like this buffer is deleted. Watch out for autocommands that
|
// It's like this buffer is deleted. Watch out for autocommands that
|
||||||
// change curbuf! If that happens, allocate a new buffer anyway.
|
// change curbuf! If that happens, allocate a new buffer anyway.
|
||||||
if (curbuf->b_p_bl)
|
buf_freeall(buf, BFA_WIPE | BFA_DEL);
|
||||||
apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
|
if (buf != curbuf) // autocommands deleted the buffer!
|
||||||
if (buf == curbuf)
|
return NULL;
|
||||||
apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (aborting()) // autocmds may abort script processing
|
if (aborting()) // autocmds may abort script processing
|
||||||
{
|
{
|
||||||
@ -2079,12 +2078,6 @@ buflist_new(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#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)
|
if (buf != curbuf || curbuf == NULL)
|
||||||
{
|
{
|
||||||
@ -2132,14 +2125,6 @@ buflist_new(
|
|||||||
|
|
||||||
if (buf == curbuf)
|
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.
|
free_buffer_stuff(buf, FALSE); // delete local variables et al.
|
||||||
|
|
||||||
// Init the options.
|
// Init the options.
|
||||||
|
@ -3037,9 +3037,10 @@ func Test_autocmd_closing_cmdwin()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_autocmd_vimgrep()
|
func Test_autocmd_vimgrep()
|
||||||
|
%bwipe!
|
||||||
augroup aucmd_vimgrep
|
augroup aucmd_vimgrep
|
||||||
au QuickfixCmdPre,BufNew,BufDelete,BufReadCmd * sb
|
au QuickfixCmdPre,BufNew,BufReadCmd * sb
|
||||||
au QuickfixCmdPre,BufNew,BufDelete,BufReadCmd * q9 |