diff options
author | James McCoy <jamessan@jamessan.com> | 2016-12-09 09:42:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-09 09:42:23 -0500 |
commit | 4a2d2248e89ea7c409e1d76beb9d39aea2b07fbe (patch) | |
tree | e123223fb0afe7c18ca35d2422c93e13c5282cbc /src | |
parent | 20995c79602ac8361a46d24a298130f83d4df035 (diff) | |
parent | 7775fb7dff89a70e247b77c233859e017ab017df (diff) | |
download | rneovim-4a2d2248e89ea7c409e1d76beb9d39aea2b07fbe.tar.gz rneovim-4a2d2248e89ea7c409e1d76beb9d39aea2b07fbe.tar.bz2 rneovim-4a2d2248e89ea7c409e1d76beb9d39aea2b07fbe.zip |
Merge pull request #5736 from jamessan/vim-7.4.1754
vim-patch:7.4.1754
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/fileio.c | 41 | ||||
-rw-r--r-- | src/nvim/testdir/test_syntax.vim | 15 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
3 files changed, 48 insertions, 10 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 934d81dcd0..529b48adbd 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -187,6 +187,14 @@ struct bw_info { static char *e_auchangedbuf = N_( "E812: Autocommands changed buffer or buffer name"); +// Set by the apply_autocmds_group function if the given event is equal to +// EVENT_FILETYPE. Used by the readfile function in order to determine if +// EVENT_BUFREADPOST triggered the EVENT_FILETYPE. +// +// Relying on this value requires one to reset it prior calling +// apply_autocmds_group. +static bool au_did_filetype INIT(= false); + void filemess(buf_T *buf, char_u *name, char_u *s, int attr) { int msg_scroll_save; @@ -329,6 +337,8 @@ readfile ( int using_b_ffname; int using_b_fname; + au_did_filetype = false; // reset before triggering any autocommands + curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */ /* @@ -1957,20 +1967,29 @@ failed: * should not be overwritten: Set msg_scroll, restore its value if no * output was done. */ - msg_scroll = TRUE; - if (filtering) + msg_scroll = true; + if (filtering) { apply_autocmds_exarg(EVENT_FILTERREADPOST, NULL, sfname, - FALSE, curbuf, eap); - else if (newfile) + false, curbuf, eap); + } else if (newfile) { apply_autocmds_exarg(EVENT_BUFREADPOST, NULL, sfname, - FALSE, curbuf, eap); - else + false, curbuf, eap); + if (!au_did_filetype && *curbuf->b_p_ft != NUL) { + // EVENT_FILETYPE was not triggered but the buffer already has a + // filetype. Trigger EVENT_FILETYPE using the existing filetype. + apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname, + true, curbuf); + } + } else { apply_autocmds_exarg(EVENT_FILEREADPOST, sfname, sfname, - FALSE, NULL, eap); - if (msg_scrolled == n) + false, NULL, eap); + } + if (msg_scrolled == n) { msg_scroll = m; - if (aborting()) /* autocmds may abort script processing */ + } + if (aborting()) { // autocmds may abort script processing return FAIL; + } } if (recoverymode && error) @@ -6865,6 +6884,10 @@ BYPASS_AU: if (event == EVENT_BUFWIPEOUT && buf != NULL) aubuflocal_remove(buf); + if (retval == OK && event == EVENT_FILETYPE) { + au_did_filetype = true; + } + return retval; } diff --git a/src/nvim/testdir/test_syntax.vim b/src/nvim/testdir/test_syntax.vim index 309c0f460b..af2cbbfe8e 100644 --- a/src/nvim/testdir/test_syntax.vim +++ b/src/nvim/testdir/test_syntax.vim @@ -61,3 +61,18 @@ func Test_syn_iskeyword() quit! endfunc + +func Test_syntax_after_reload() + split Xsomefile + call setline(1, ['hello', 'there']) + w! + only! + setl filetype=hello + au FileType hello let g:gotit = 1 + call assert_false(exists('g:gotit')) + edit other + buf Xsomefile + call assert_equal('hello', &filetype) + call assert_true(exists('g:gotit')) + call delete('Xsomefile') +endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index 821922fd38..f78ae00dad 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -689,7 +689,7 @@ static int included_patches[] = { 1757, // 1756 NA 1755, - // 1754, + 1754, 1753, // 1753, // 1752, |