Mercurial > vim
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);