Skip to content

Commit

Permalink
patch 8.1.0729: there is a SourcePre autocommand event but not a Sour…
Browse files Browse the repository at this point in the history
…cePost

Problem:    There is a SourcePre autocommand event but not a SourcePost.
Solution:   Add the SourcePost autocommand event. (closes #3739)
  • Loading branch information
brammool committed Jan 12, 2019
1 parent c3c3158 commit 2b61852
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 1 deletion.
6 changes: 6 additions & 0 deletions runtime/doc/autocmd.txt
Expand Up @@ -925,6 +925,12 @@ ShellFilterPost After executing a shell command with
*SourcePre*
SourcePre Before sourcing a Vim script. |:source|
<afile> is the name of the file being sourced.
*SourcePost*
SourcePost After sourcing a Vim script. |:source|
<afile> is the name of the file being sourced.
Not triggered when sourcing was interrupted.
Also triggered after a SourceCmd autocommand
was triggered.
*SourceCmd*
SourceCmd When sourcing a Vim script. |:source|
<afile> is the name of the file being sourced.
Expand Down
12 changes: 12 additions & 0 deletions src/ex_cmds2.c
Expand Up @@ -4360,6 +4360,7 @@ do_source(
#ifdef FEAT_PROFILE
proftime_T wait_start;
#endif
int trigger_source_post = FALSE;

p = expand_env_save(fname);
if (p == NULL)
Expand All @@ -4384,6 +4385,10 @@ do_source(
#else
retval = OK;
#endif
if (retval == OK)
// Apply SourcePost autocommands.
apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp,
FALSE, curbuf);
goto theend;
}

Expand Down Expand Up @@ -4653,6 +4658,9 @@ do_source(
}
#endif

if (!got_int)
trigger_source_post = TRUE;

#ifdef FEAT_EVAL
/*
* After a "finish" in debug mode, need to break at first command of next
Expand All @@ -4679,6 +4687,10 @@ do_source(
convert_setup(&cookie.conv, NULL, NULL);
#endif

if (trigger_source_post)
apply_autocmds(EVENT_SOURCEPOST, si->sn_name, si->sn_name,
FALSE, curbuf);

theend:
vim_free(fname_exp);
return retval;
Expand Down
3 changes: 2 additions & 1 deletion src/fileio.c
Expand Up @@ -7795,8 +7795,9 @@ static struct event_name
{"SessionLoadPost", EVENT_SESSIONLOADPOST},
{"ShellCmdPost", EVENT_SHELLCMDPOST},
{"ShellFilterPost", EVENT_SHELLFILTERPOST},
{"SourcePre", EVENT_SOURCEPRE},
{"SourceCmd", EVENT_SOURCECMD},
{"SourcePre", EVENT_SOURCEPRE},
{"SourcePost", EVENT_SOURCEPOST},
{"SpellFileMissing",EVENT_SPELLFILEMISSING},
{"StdinReadPost", EVENT_STDINREADPOST},
{"StdinReadPre", EVENT_STDINREADPRE},
Expand Down
2 changes: 2 additions & 0 deletions src/testdir/Make_all.mak
Expand Up @@ -222,6 +222,7 @@ NEW_TESTS = \
test_signs \
test_smartindent \
test_sort \
test_source \
test_source_utf8 \
test_spell \
test_startup \
Expand Down Expand Up @@ -376,6 +377,7 @@ NEW_TESTS_RES = \
test_shortpathname.res \
test_signs.res \
test_smartindent.res \
test_source.res \
test_spell.res \
test_startup.res \
test_stat.res \
Expand Down
38 changes: 38 additions & 0 deletions src/testdir/test_source.vim
@@ -0,0 +1,38 @@
" Tests for the :source command.

func Test_source_autocmd()
call writefile([
\ 'let did_source = 1',
\ ], 'Xsourced')
au SourcePre *source* let did_source_pre = 1
au SourcePost *source* let did_source_post = 1

source Xsourced

call assert_equal(g:did_source, 1)
call assert_equal(g:did_source_pre, 1)
call assert_equal(g:did_source_post, 1)

call delete('Xsourced')
au! SourcePre
au! SourcePost
unlet g:did_source
unlet g:did_source_pre
unlet g:did_source_post
endfunc

func Test_source_cmd()
au SourceCmd *source* let did_source = expand('<afile>')
au SourcePre *source* let did_source_pre = 2
au SourcePost *source* let did_source_post = 2

source Xsourced

call assert_equal(g:did_source, 'Xsourced')
call assert_false(exists('g:did_source_pre'))
call assert_equal(g:did_source_post, 2)

au! SourceCmd
au! SourcePre
au! SourcePost
endfunc
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -795,6 +795,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
729,
/**/
728,
/**/
Expand Down
1 change: 1 addition & 0 deletions src/vim.h
Expand Up @@ -1324,6 +1324,7 @@ enum auto_event
EVENT_SHELLFILTERPOST, // after ":1,2!cmd", ":w !cmd", ":r !cmd".
EVENT_SOURCECMD, // sourcing a Vim script using command
EVENT_SOURCEPRE, // before sourcing a Vim script
EVENT_SOURCEPOST, // after sourcing a Vim script
EVENT_SPELLFILEMISSING, // spell file missing
EVENT_STDINREADPOST, // after reading from stdin
EVENT_STDINREADPRE, // before reading from stdin
Expand Down

0 comments on commit 2b61852

Please sign in to comment.