mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.0769: VimLeavePre not triggered when Vim is terminated
Problem: VimLeavePre not triggered when Vim is terminated. Solution: Unblock autocommands.
This commit is contained in:
parent
e75ba268b3
commit
129d6bf6b3
11
src/main.c
11
src/main.c
@ -1576,6 +1576,7 @@ getout(int exitval)
|
||||
tabpage_T *next_tp;
|
||||
buf_T *buf;
|
||||
win_T *wp;
|
||||
int unblock = 0;
|
||||
|
||||
// Trigger BufWinLeave for all windows, but only once per buffer.
|
||||
for (tp = first_tabpage; tp != NULL; tp = next_tp)
|
||||
@ -1617,7 +1618,17 @@ getout(int exitval)
|
||||
// autocmd deleted the buffer
|
||||
break;
|
||||
}
|
||||
|
||||
// deathtrap() blocks autocommands, but we do want to trigger
|
||||
// VimLeavePre.
|
||||
if (is_autocmd_blocked())
|
||||
{
|
||||
unblock_autocmds();
|
||||
++unblock;
|
||||
}
|
||||
apply_autocmds(EVENT_VIMLEAVEPRE, NULL, NULL, FALSE, curbuf);
|
||||
if (unblock)
|
||||
block_autocmds();
|
||||
}
|
||||
|
||||
#ifdef FEAT_VIMINFO
|
||||
|
@ -127,8 +127,13 @@ func Test_deadly_signal_TERM()
|
||||
if cmd =~ 'valgrind'
|
||||
throw 'Skipped: cannot test signal TERM with valgrind'
|
||||
endif
|
||||
let lines =<< trim END
|
||||
au VimLeave * call writefile(["VimLeave triggered"], "XautoOut", "a")
|
||||
au VimLeavePre * call writefile(["VimLeavePre triggered"], "XautoOut", "a")
|
||||
END
|
||||
call writefile(lines, 'XsetupAucmd')
|
||||
|
||||
let buf = RunVimInTerminal('Xsig_TERM', {'rows': 6})
|
||||
let buf = RunVimInTerminal('-S XsetupAucmd Xsig_TERM', {'rows': 6})
|
||||
let pid_vim = term_getjob(buf)->job_info().process
|
||||
|
||||
call term_sendkeys(buf, ":call setline(1, 'foo')\n")
|
||||
@ -145,8 +150,14 @@ func Test_deadly_signal_TERM()
|
||||
silent recover .Xsig_TERM.swp
|
||||
call assert_equal(['foo'], getline(1, '$'))
|
||||
|
||||
let result = readfile('XautoOut')
|
||||
call assert_match('VimLeavePre triggered', result[0])
|
||||
call assert_match('VimLeave triggered', result[1])
|
||||
|
||||
%bwipe!
|
||||
call delete('.Xsig_TERM.swp')
|
||||
call delete('XsetupAucmd')
|
||||
call delete('XautoOut')
|
||||
endfunc
|
||||
|
||||
" vim: ts=8 sw=2 sts=2 tw=80 fdm=marker
|
||||
|
@ -746,6 +746,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
769,
|
||||
/**/
|
||||
768,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user