diff src/option.c @ 19405:08f4dc2ba716 v8.2.0260

patch 8.2.0260: several lines of code are duplicated Commit: https://github.com/vim/vim/commit/f4140488c72cad4dbf5449dba099cfa7de7bbb22 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 15 23:06:45 2020 +0100 patch 8.2.0260: several lines of code are duplicated Problem: Several lines of code are duplicated. Solution: Move duplicated code to a function. (Yegappan Lakshmanan, closes #5330)
author Bram Moolenaar <Bram@vim.org>
date Sat, 15 Feb 2020 23:15:04 +0100
parents 2ef19eed524a
children aadd1cae2ff5
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -2498,6 +2498,61 @@ set_term_option_sctx_idx(char *name, int
 }
 #endif
 
+#if defined(FEAT_EVAL)
+/*
+ * Apply the OptionSet autocommand.
+ */
+    static void
+apply_optionset_autocmd(
+	int	opt_idx,
+	long	opt_flags,
+	long	oldval,
+	long	oldval_g,
+	long	newval,
+	char	*errmsg)
+{
+    char_u buf_old[12], buf_old_global[12], buf_new[12], buf_type[12];
+
+    // Don't do this while starting up, failure or recursively.
+    if (starting || errmsg != NULL || *get_vim_var_str(VV_OPTION_TYPE) != NUL)
+	return;
+
+    vim_snprintf((char *)buf_old, sizeof(buf_old), "%ld", oldval);
+    vim_snprintf((char *)buf_old_global, sizeof(buf_old_global), "%ld",
+							oldval_g);
+    vim_snprintf((char *)buf_new, sizeof(buf_new), "%ld", newval);
+    vim_snprintf((char *)buf_type, sizeof(buf_type), "%s",
+				(opt_flags & OPT_LOCAL) ? "local" : "global");
+    set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
+    set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
+    set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
+    if (opt_flags & OPT_LOCAL)
+    {
+	set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setlocal", -1);
+	set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
+    }
+    if (opt_flags & OPT_GLOBAL)
+    {
+	set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setglobal", -1);
+	set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
+    }
+    if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
+    {
+	set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"set", -1);
+	set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
+	set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
+    }
+    if (opt_flags & OPT_MODELINE)
+    {
+	set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"modeline", -1);
+	set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
+    }
+    apply_autocmds(EVENT_OPTIONSET, (char_u *)options[opt_idx].fullname,
+	    NULL, FALSE, NULL);
+    reset_v_option_vars();
+}
+#endif
+
 /*
  * Set the value of a boolean option, and take care of side effects.
  * Returns NULL for success, or an error message for an error.
@@ -3071,45 +3126,10 @@ set_bool_option(
     options[opt_idx].flags |= P_WAS_SET;
 
 #if defined(FEAT_EVAL)
-    // 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_old_global[2], buf_new[2], buf_type[7];
-
-	vim_snprintf((char *)buf_old, 2, "%d", old_value ? TRUE: FALSE);
-	vim_snprintf((char *)buf_old_global, 2, "%d",
-					       old_global_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");
-	set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
-	set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
-	set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
-	if (opt_flags & OPT_LOCAL)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setlocal", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	}
-	if (opt_flags & OPT_GLOBAL)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setglobal", -1);
-	    set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
-	}
-	if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"set", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	    set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
-	}
-	if (opt_flags & OPT_MODELINE)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"modeline", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	}
-	apply_autocmds(EVENT_OPTIONSET, (char_u *)options[opt_idx].fullname,
-							    NULL, FALSE, NULL);
-	reset_v_option_vars();
-    }
+    apply_optionset_autocmd(opt_idx, opt_flags,
+				(long)(old_value ? TRUE : FALSE),
+				(long)(old_global_value ? TRUE : FALSE),
+				(long)(value ? TRUE : FALSE), NULL);
 #endif
 
     comp_col();			    // in case 'ruler' or 'showcmd' changed
@@ -3666,42 +3686,8 @@ set_num_option(
     options[opt_idx].flags |= P_WAS_SET;
 
 #if defined(FEAT_EVAL)
-    // 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_old_global[11], buf_new[11], buf_type[7];
-	vim_snprintf((char *)buf_old, 10, "%ld", old_value);
-	vim_snprintf((char *)buf_old_global, 10, "%ld", old_global_value);
-	vim_snprintf((char *)buf_new, 10, "%ld", value);
-	vim_snprintf((char *)buf_type, 7, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global");
-	set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
-	set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
-	set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
-	if (opt_flags & OPT_LOCAL)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setlocal", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	}
-	if (opt_flags & OPT_GLOBAL)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"setglobal", -1);
-	    set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
-	}
-	if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"set", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	    set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
-	}
-	if (opt_flags & OPT_MODELINE)
-	{
-	    set_vim_var_string(VV_OPTION_COMMAND, (char_u *)"modeline", -1);
-	    set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
-	}
-	apply_autocmds(EVENT_OPTIONSET, (char_u *)options[opt_idx].fullname,
-							    NULL, FALSE, NULL);
-	reset_v_option_vars();
-    }
+    apply_optionset_autocmd(opt_idx, opt_flags, old_value, old_global_value,
+								value, errmsg);
 #endif
 
     comp_col();			    // in case 'columns' or 'ls' changed