# HG changeset patch # User Christian Brabandt # Date 1529255705 -7200 # Node ID 1157f16150b347d47c52b9b12f90e3d952a95495 # Parent d9ce494519f8d7ca03690a76d9465197acf23aa2 patch 8.1.0067: syntax highlighting not working when re-entering a buffer commit https://github.com/vim/vim/commit/a5616b0136cea2104a475d143a1685d71e9b2d3d Author: Bram Moolenaar Date: Sun Jun 17 19:08:30 2018 +0200 patch 8.1.0067: syntax highlighting not working when re-entering a buffer Problem: Syntax highlighting not working when re-entering a buffer. Solution: Do force executing autocommands when not called recursively. diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -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; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 67, +/**/ 66, /**/ 65,