Skip to content

Commit

Permalink
patch 8.0.1204: a QuitPre autocommand may get the wrong file name
Browse files Browse the repository at this point in the history
Problem:    A QuitPre autocommand may get the wrong file name.
Solution:   Pass the buffer being closed to apply_autocmds(). (Rich Howe)
  • Loading branch information
brammool committed Oct 19, 2017
1 parent 6daeef1 commit 87ffb5c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/ex_docmd.c
Expand Up @@ -7224,10 +7224,14 @@ ex_quit(exarg_T *eap)
wp = curwin;

#ifdef FEAT_AUTOCMD
apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
/* Refuse to quit when locked or when the buffer in the last window is
* being closed (can only happen in autocommands). */
if (curbuf_locked() || !win_valid(wp)
/* Refuse to quit when locked. */
if (curbuf_locked())
return;
apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, wp->w_buffer);
/* Bail out when autocommands closed the window.
* Refuse to quit when the buffer in the last window is being closed (can
* only happen in autocommands). */
if (!win_valid(wp)
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0))
return;
#endif
Expand Down
14 changes: 14 additions & 0 deletions src/testdir/test_autocmd.vim
Expand Up @@ -779,3 +779,17 @@ func Test_BufLeave_Wipe()
" check that bufinfo doesn't contain a pointer to freed memory
call test_garbagecollect_now()
endfunc

func Test_QuitPre()
edit Xfoo
let winid = win_getid(winnr())
split Xbar
au! QuitPre * let g:afile = expand('<afile>')
" Close the other window, <afile> should be correct.
exe win_id2win(winid) . 'q'
call assert_equal('Xfoo', g:afile)

unlet g:afile
bwipe Xfoo
bwipe Xbar
endfunc
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -761,6 +761,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1204,
/**/
1203,
/**/
Expand Down

0 comments on commit 87ffb5c

Please sign in to comment.