changeset 14804:cca823b02a04 v8.1.0414

patch 8.1.0414: v:option_old is cleared when using :set in OptionSet autocmd commit https://github.com/vim/vim/commit/3f3fb0b14734272e7c817020c847aaa0fba5cea5 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 21 11:59:32 2018 +0200 patch 8.1.0414: v:option_old is cleared when using :set in OptionSet autocmd Problem: v:option_old and v:option_new are cleared when using :set in OptionSet autocmd. (Gary Johnson) Solution: Don't trigger OptionSet recursively.
author Christian Brabandt <cb@256bit.org>
date Fri, 21 Sep 2018 12:00:17 +0200
parents 2739f3b643cc
children c784720ab1c3
files src/option.c src/version.c
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -4359,7 +4359,9 @@ trigger_optionsset_string(
 	char_u *oldval,
 	char_u *newval)
 {
-    if (oldval != NULL && newval != NULL)
+    // Don't do this recursively.
+    if (oldval != NULL && newval != NULL
+				    && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
     {
 	char_u buf_type[7];
 
@@ -8858,9 +8860,11 @@ set_bool_option(
     options[opt_idx].flags |= P_WAS_SET;
 
 #if defined(FEAT_EVAL)
-    if (!starting)
+    // Don't do this while starting up or recursively.
+    if (!starting && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
     {
 	char_u buf_old[2], buf_new[2], buf_type[7];
+
 	vim_snprintf((char *)buf_old, 2, "%d", old_value ? TRUE: FALSE);
 	vim_snprintf((char *)buf_new, 2, "%d", value ? TRUE: FALSE);
 	vim_snprintf((char *)buf_type, 7, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global");
@@ -9415,7 +9419,8 @@ set_num_option(
     options[opt_idx].flags |= P_WAS_SET;
 
 #if defined(FEAT_EVAL)
-    if (!starting && errmsg == NULL)
+    // Don't do this while starting up, failure or recursively.
+    if (!starting && errmsg == NULL && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
     {
 	char_u buf_old[11], buf_new[11], buf_type[7];
 	vim_snprintf((char *)buf_old, 10, "%ld", old_value);
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    414,
+/**/
     413,
 /**/
     412,