]> granicus.if.org Git - vim/commitdiff
patch 8.1.0067: syntax highlighting not working when re-entering a buffer v8.1.0067
authorBram Moolenaar <Bram@vim.org>
Sun, 17 Jun 2018 17:08:30 +0000 (19:08 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 17 Jun 2018 17:08:30 +0000 (19:08 +0200)
Problem:    Syntax highlighting not working when re-entering a buffer.
Solution:   Do force executing autocommands when not called recursively.

src/option.c
src/version.c

index 2ecdcea649e9917a0cacdb9f3bc32304ff6c6a2f..cf774ac236260fd81745785bccb3dae38413dc94 100644 (file)
@@ -7567,24 +7567,32 @@ did_set_string_option(
        /* When 'syntax' is set, load the syntax of that name */
        if (varp == &(curbuf->b_p_syn))
        {
-           // Only pass TRUE for "force" when the value changed, to avoid
-           // endless recurrence. */
-           apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
-                                      curbuf->b_fname, value_changed, curbuf);
+           static int syn_recursive = 0;
+
+           ++syn_recursive;
+           // Only pass TRUE for "force" when the value changed or not used
+           // recursively, to avoid endless recurrence.
+           apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, curbuf->b_fname,
+                   value_changed || syn_recursive == 1, curbuf);
+           --syn_recursive;
        }
 #endif
        else if (varp == &(curbuf->b_p_ft))
        {
            /* 'filetype' is set, trigger the FileType autocommand.
             * Skip this when called from a modeline and the filetype was
-            * already set to this value.
-            * Only pass TRUE for "force" when the value changed, to avoid
-            * endless recurrence. */
+            * already set to this value. */
            if (!(opt_flags & OPT_MODELINE) || value_changed)
            {
+               static int ft_recursive = 0;
+
+               ++ft_recursive;
                did_filetype = TRUE;
-               apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
-                                      curbuf->b_fname, value_changed, curbuf);
+               // Only pass TRUE for "force" when the value changed or not
+               // used recursively, to avoid endless recurrence.
+               apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname,
+                                  value_changed || ft_recursive == 1, curbuf);
+               --ft_recursive;
                /* Just in case the old "curbuf" is now invalid. */
                if (varp != &(curbuf->b_p_ft))
                    varp = NULL;
index d3c7316c918ef2d2ec431859d41b661d1ac8ca52..0ecc60c49716b50534e22fa6f5be75bf3ea5eb6d 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    67,
 /**/
     66,
 /**/