aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-12-09 09:42:23 -0500
committerGitHub <noreply@github.com>2016-12-09 09:42:23 -0500
commit4a2d2248e89ea7c409e1d76beb9d39aea2b07fbe (patch)
treee123223fb0afe7c18ca35d2422c93e13c5282cbc /src
parent20995c79602ac8361a46d24a298130f83d4df035 (diff)
parent7775fb7dff89a70e247b77c233859e017ab017df (diff)
downloadrneovim-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.c41
-rw-r--r--src/nvim/testdir/test_syntax.vim15
-rw-r--r--src/nvim/version.c2
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,