From a52c38d79049000577320e11bd88b82852f2cfe6 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 22 Sep 2018 11:40:19 -0400 Subject: vim-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. https://github.com/vim/vim/commit/3f3fb0b14734272e7c817020c847aaa0fba5cea5 --- src/nvim/option.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/option.c b/src/nvim/option.c index 8e2264c6a7..e354d90c41 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -4019,7 +4019,8 @@ static char *set_bool_option(const int opt_idx, char_u *const varp, options[opt_idx].flags |= P_WAS_SET; - if (!starting) { + // Don't do this while starting up or recursively. + if (!starting && *get_vim_var_str(VV_OPTION_TYPE) == NUL) { char buf_old[2]; char buf_new[2]; char buf_type[7]; @@ -4393,7 +4394,8 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, options[opt_idx].flags |= P_WAS_SET; - 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 buf_old[NUMBUFLEN]; char buf_new[NUMBUFLEN]; char buf_type[7]; @@ -4426,7 +4428,10 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, static void trigger_optionsset_string(int opt_idx, int opt_flags, char *oldval, char *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 buf_type[7]; vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s", -- cgit