1
0
forked from aniani/vim

patch 7.4.1837

Problem:    The BufUnload event is triggered twice, when :bunload is used with
             set to  or .
Solution:   Do not trigger the event when ml_mfp is NULL. (Hirohito Higashi)
This commit is contained in:
Bram Moolenaar
2016-05-24 16:07:40 +02:00
parent 1d429610bf
commit c67e892134
3 changed files with 56 additions and 24 deletions

View File

@@ -574,9 +574,12 @@ buf_freeall(buf_T *buf, int flags)
int is_curbuf = (buf == curbuf);
buf->b_closing = TRUE;
if (buf->b_ml.ml_mfp != NULL)
{
apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
if (!buf_valid(buf)) /* autocommands may delete the buffer */
return;
}
if ((flags & BFA_DEL) && buf->b_p_bl)
{
apply_autocmds(EVENT_BUFDELETE, buf->b_fname, buf->b_fname, FALSE, buf);

View File

@@ -7,24 +7,21 @@ func Test_vim_did_enter()
" becomes one.
endfunc
if !has('timers')
finish
endif
func ExitInsertMode(id)
if has('timers')
func ExitInsertMode(id)
call feedkeys("\<Esc>")
endfunc
endfunc
func Test_cursorhold_insert()
func Test_cursorhold_insert()
let g:triggered = 0
au CursorHoldI * let g:triggered += 1
set updatetime=20
call timer_start(100, 'ExitInsertMode')
call feedkeys('a', 'x!')
call assert_equal(1, g:triggered)
endfunc
endfunc
func Test_cursorhold_insert_ctrl_x()
func Test_cursorhold_insert_ctrl_x()
let g:triggered = 0
au CursorHoldI * let g:triggered += 1
set updatetime=20
@@ -32,4 +29,34 @@ func Test_cursorhold_insert_ctrl_x()
" CursorHoldI does not trigger after CTRL-X
call feedkeys("a\<C-X>", 'x!')
call assert_equal(0, g:triggered)
endfunc
endif
function Test_bufunload()
augroup test_bufunload_group
autocmd!
autocmd BufUnload * call add(s:li, "bufunload")
autocmd BufDelete * call add(s:li, "bufdelete")
autocmd BufWipeout * call add(s:li, "bufwipeout")
augroup END
let s:li=[]
new
setlocal bufhidden=
bunload
call assert_equal(["bufunload", "bufdelete"], s:li)
let s:li=[]
new
setlocal bufhidden=delete
bunload
call assert_equal(["bufunload", "bufdelete"], s:li)
let s:li=[]
new
setlocal bufhidden=unload
bwipeout
call assert_equal(["bufunload", "bufdelete", "bufwipeout"], s:li)
augroup! test_bufunload_group
endfunc

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1837,
/**/
1836,
/**/