patch 8.2.3972: error messages are spread out

Problem:    Error messages are spread out.
Solution:   Move the last errors from globals.h to errors.h.
diff --git a/src/errors.h b/src/errors.h
index a333385..27dde8f 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -528,7 +528,15 @@
 EXTERN char e_couldnt_read_in_sign_data[]
 	INIT(= N_("E255: Couldn't read in sign data"));
 #endif
+#ifdef FEAT_EVAL
+EXTERN char e_no_white_space_allowed_before_parenthesis[]
+	INIT(= N_("E274: No white space allowed before parenthesis"));
+#endif
 
+#ifdef FEAT_MENU
+EXTERN char e_menu_only_exists_in_another_mode[]
+	INIT(= N_("E328: Menu only exists in another mode"));
+#endif
 EXTERN char e_internal_error_lalloc_zero[]
 	INIT(= N_("E341: Internal error: lalloc(0, )"));
 EXTERN char e_out_of_memory_allocating_nr_bytes[]
@@ -668,6 +676,16 @@
 EXTERN char e_not_allowed_to_change_text_here[]
 	INIT(= N_("E578: Not allowed to change text here"));
 #ifdef FEAT_EVAL
+EXTERN char e_endif_without_if[]
+	INIT(= N_("E580: :endif without :if"));
+EXTERN char e_else_without_if[]
+	INIT(= N_("E581: :else without :if"));
+EXTERN char e_elseif_without_if[]
+	INIT(= N_("E582: :elseif without :if"));
+EXTERN char e_continue_without_while_or_for[]
+	INIT(= N_("E586: :continue without :while or :for"));
+EXTERN char e_break_without_while_or_for[]
+	INIT(= N_("E587: :break without :while or :for"));
 EXTERN char e_endwhile_without_while[]
 	INIT(= N_("E588: :endwhile without :while"));
 EXTERN char e_endfor_without_for[]
@@ -716,11 +734,17 @@
 EXTERN char e_internal_error_str[]
 	INIT(= N_("E685: Internal error: %s"));
 #ifdef FEAT_EVAL
+EXTERN char e_argument_of_str_must_be_list[]
+	INIT(= N_("E686: Argument of %s must be a List"));
+EXTERN char e_missing_in_after_for[]
+	INIT(= N_("E690: Missing \"in\" after :for"));
+// E693 unused
 EXTERN char e_cannot_index_a_funcref[]
 	INIT(= N_("E695: Cannot index a Funcref"));
 EXTERN char e_missing_end_of_list_rsb_str[]
 	INIT(= N_("E697: Missing end of List ']': %s"));
 
+// E706 unused
 EXTERN char e_list_value_has_more_items_than_targets[]
 	INIT(= N_("E710: List value has more items than targets"));
 EXTERN char e_list_value_does_not_have_enough_items[]
@@ -864,6 +888,10 @@
 	INIT(= N_("E937: Attempt to delete a buffer that is in use: %s"));
 EXTERN char e_positive_count_required[]
 	INIT(= N_("E939: Positive count required"));
+#ifdef FEAT_EVAL
+EXTERN char e_cannot_lock_or_unlock_variable_str[]
+	INIT(= N_("E940: Cannot lock or unlock variable %s"));
+#endif
 #ifdef FEAT_TERMINAL
 EXTERN char e_job_still_running[]
 	INIT(= N_("E948: Job still running"));
@@ -874,6 +902,8 @@
 	INIT(= N_("E949: File changed while writing"));
 EXTERN char e_autocommand_caused_recursive_behavior[]
 	INIT(= N_("E952: Autocommand caused recursive behavior"));
+EXTERN char e_invalid_window_number[]
+	INIT(= N_("E957: Invalid window number"));
 EXTERN char_u e_invalid_column_number_nr[]
 	INIT(= N_("E964: Invalid column number: %ld"));
 EXTERN char_u e_invalid_line_number_nr[]
diff --git a/src/eval.c b/src/eval.c
index fa3941c..f228067 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1632,7 +1632,7 @@
 	if (in_vim9script() && *expr == ':' && expr != var_list_end)
 	    semsg(_(e_no_white_space_allowed_before_colon_str), expr);
 	else
-	    emsg(_(e_missing_in));
+	    emsg(_(e_missing_in_after_for));
 	return fi;
     }
 
@@ -3888,7 +3888,7 @@
 	if (verbose)
 	{
 	    if (*skipwhite(*arg) == '(')
-		emsg(_(e_nowhitespace));
+		emsg(_(e_no_white_space_allowed_before_parenthesis));
 	    else
 		semsg(_(e_missing_parenthesis_str), "lambda");
 	}
@@ -3951,7 +3951,7 @@
 	else if (VIM_ISWHITE((*arg)[-1]))
 	{
 	    if (verbose)
-		emsg(_(e_nowhitespace));
+		emsg(_(e_no_white_space_allowed_before_parenthesis));
 	    ret = FAIL;
 	}
 	else
@@ -5948,7 +5948,7 @@
 	    {
 		if (VIM_ISWHITE(**arg))
 		{
-		    emsg(_(e_nowhitespace));
+		    emsg(_(e_no_white_space_allowed_before_parenthesis));
 		    ret = FAIL;
 		}
 		else if ((**arg == '{' && !in_vim9script()) || **arg == '(')
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 92764c6..f491a7c 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3071,7 +3071,7 @@
 	win = find_win_by_nr_or_id(&argvars[idx]);
 	if (win == NULL)
 	{
-	    emsg(_(e_invalwindow));
+	    emsg(_(e_invalid_window_number));
 	    return NULL;
 	}
     }
@@ -6570,7 +6570,7 @@
 
     if (argvars[0].v_type != VAR_LIST || argvars[0].vval.v_list == NULL)
     {
-	semsg(_(e_listarg), "inputlist()");
+	semsg(_(e_argument_of_str_must_be_list), "inputlist()");
 	return;
     }
 
diff --git a/src/evalvars.c b/src/evalvars.c
index a54158f..fba668d 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -1889,7 +1889,7 @@
 	*name_end = NUL;
 	if (*lp->ll_name == '$')
 	{
-	    semsg(_(e_lock_unlock), lp->ll_name);
+	    semsg(_(e_cannot_lock_or_unlock_variable_str), lp->ll_name);
 	    ret = FAIL;
 	}
 	else
@@ -1909,7 +1909,7 @@
 	    {
 		// For historic reasons this error is not given for a list or
 		// dict.  E.g., the b: dict could be locked/unlocked.
-		semsg(_(e_lock_unlock), lp->ll_name);
+		semsg(_(e_cannot_lock_or_unlock_variable_str), lp->ll_name);
 		ret = FAIL;
 	    }
 	    else
diff --git a/src/evalwindow.c b/src/evalwindow.c
index f863026..0fc62d1 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -916,7 +916,7 @@
 	    || !win_valid(wp) || !win_valid(targetwin)
 	    || win_valid_popup(wp) || win_valid_popup(targetwin))
     {
-        emsg(_(e_invalwindow));
+        emsg(_(e_invalid_window_number));
 	rettv->vval.v_number = -1;
 	return;
     }
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 4f4a0a6..9a47802 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -1316,7 +1316,7 @@
     cstack_T	*cstack = eap->cstack;
 
     if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
-	eap->errmsg = _(e_continue);
+	eap->errmsg = _(e_continue_without_while_or_for);
     else
     {
 	// Try to find the matching ":while".  This might stop at a try
@@ -1354,7 +1354,7 @@
     cstack_T	*cstack = eap->cstack;
 
     if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
-	eap->errmsg = _(e_break);
+	eap->errmsg = _(e_break_without_while_or_for);
     else
     {
 	// Inactivate conditionals until the matching ":while" or a try
diff --git a/src/globals.h b/src/globals.h
index 1e8fd25..cdad353 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1600,36 +1600,15 @@
 #endif
 
 /*
- * Some error messages that can be shared are included here.
- * They should be moved to errors.h.
+ * Some messages that can be shared are included here.
  */
-#ifdef FEAT_MENU
-EXTERN char e_menuothermode[]	INIT(= N_("E328: Menu only exists in another mode"));
-#endif
-EXTERN char e_invalwindow[]	INIT(= N_("E957: Invalid window number"));
-EXTERN char e_listarg[]		INIT(= N_("E686: Argument of %s must be a List"));
-#ifdef FEAT_EVAL
-EXTERN char e_missing_in[]	INIT(= N_("E690: Missing \"in\" after :for"));
-EXTERN char e_else_without_if[] INIT(= N_("E581: :else without :if"));
-EXTERN char e_elseif_without_if[] INIT(= N_("E582: :elseif without :if"));
-EXTERN char e_endif_without_if[] INIT(= N_("E580: :endif without :if"));
-EXTERN char e_continue[]	INIT(= N_("E586: :continue without :while or :for"));
-EXTERN char e_break[]		INIT(= N_("E587: :break without :while or :for"));
-EXTERN char e_nowhitespace[]	INIT(= N_("E274: No white space allowed before parenthesis"));
+EXTERN char top_bot_msg[]   INIT(= N_("search hit TOP, continuing at BOTTOM"));
+EXTERN char bot_top_msg[]   INIT(= N_("search hit BOTTOM, continuing at TOP"));
 
-EXTERN char e_lock_unlock[]	INIT(= N_("E940: Cannot lock or unlock variable %s"));
-#endif
-
-EXTERN char e_chan_or_job_req[]	INIT(= N_("E706: Channel or Job required"));
-EXTERN char e_jobreq[]		INIT(= N_("E693: Job required"));
-
-EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM"));
-EXTERN char bot_top_msg[] INIT(= N_("search hit BOTTOM, continuing at TOP"));
-
-EXTERN char line_msg[]		INIT(= N_(" line "));
+EXTERN char line_msg[]	    INIT(= N_(" line "));
 
 #ifdef FEAT_CRYPT
-EXTERN char need_key_msg[] INIT(= N_("Need encryption key for \"%s\""));
+EXTERN char need_key_msg[]  INIT(= N_("Need encryption key for \"%s\""));
 #endif
 
 /*
diff --git a/src/list.c b/src/list.c
index fe8c082..743ccf5 100644
--- a/src/list.c
+++ b/src/list.c
@@ -992,7 +992,7 @@
 
     if (argvars[0].v_type != VAR_LIST)
     {
-	semsg(_(e_listarg), "flatten()");
+	semsg(_(e_argument_of_str_must_be_list), "flatten()");
 	return;
     }
 
@@ -2202,7 +2202,7 @@
 
     if (argvars[0].v_type != VAR_LIST)
     {
-	semsg(_(e_listarg), sort ? "sort()" : "uniq()");
+	semsg(_(e_argument_of_str_must_be_list), sort ? "sort()" : "uniq()");
 	return;
     }
 
diff --git a/src/match.c b/src/match.c
index 9589d55..082c079 100644
--- a/src/match.c
+++ b/src/match.c
@@ -949,7 +949,7 @@
 	*win = find_win_by_nr_or_id(&di->di_tv);
 	if (*win == NULL)
 	{
-	    emsg(_(e_invalwindow));
+	    emsg(_(e_invalid_window_number));
 	    return FAIL;
 	}
     }
@@ -1259,7 +1259,7 @@
 
     if (argvars[1].v_type != VAR_LIST)
     {
-	semsg(_(e_listarg), "matchaddpos()");
+	semsg(_(e_argument_of_str_must_be_list), "matchaddpos()");
 	return;
     }
     l = argvars[1].vval.v_list;
diff --git a/src/menu.c b/src/menu.c
index 9ecba44..0583c10 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -959,7 +959,7 @@
 	    else if (*name != NUL)
 	    {
 		if (!silent)
-		    emsg(_(e_menuothermode));
+		    emsg(_(e_menu_only_exists_in_another_mode));
 		return FAIL;
 	    }
 
@@ -1133,7 +1133,7 @@
 		}
 		else if ((menu->modes & modes) == 0x0)
 		{
-		    emsg(_(e_menuothermode));
+		    emsg(_(e_menu_only_exists_in_another_mode));
 		    vim_free(path_name);
 		    return FAIL;
 		}
diff --git a/src/popupmenu.c b/src/popupmenu.c
index 86a9cbb..cf5558b 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -1476,7 +1476,7 @@
     // pum_size being zero.
     if (pum_size <= 0)
     {
-	emsg(e_menuothermode);
+	emsg(e_menu_only_exists_in_another_mode);
 	return;
     }
 
diff --git a/src/search.c b/src/search.c
index 35a4a3a..c3597e6 100644
--- a/src/search.c
+++ b/src/search.c
@@ -4807,7 +4807,8 @@
     // validate and get the arguments
     if (argvars[0].v_type != VAR_LIST || argvars[0].vval.v_list == NULL)
     {
-	semsg(_(e_listarg), retmatchpos ? "matchfuzzypos()" : "matchfuzzy()");
+	semsg(_(e_argument_of_str_must_be_list),
+			     retmatchpos ? "matchfuzzypos()" : "matchfuzzy()");
 	return;
     }
     if (argvars[1].v_type != VAR_STRING
diff --git a/src/version.c b/src/version.c
index 86c7a47..f98cf43 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3972,
+/**/
     3971,
 /**/
     3970,
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index 250c265..5a86a94 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -796,7 +796,7 @@
 	if (*p == ':' && wp != p)
 	    semsg(_(e_no_white_space_allowed_before_colon_str), p);
 	else
-	    emsg(_(e_missing_in));
+	    emsg(_(e_missing_in_after_for));
 	return NULL;
     }
     wp = p + 2;
@@ -1150,7 +1150,7 @@
     {
 	if (scope == NULL)
 	{
-	    emsg(_(e_continue));
+	    emsg(_(e_continue_without_while_or_for));
 	    return NULL;
 	}
 	if (scope->se_type == FOR_SCOPE)
@@ -1192,7 +1192,7 @@
     {
 	if (scope == NULL)
 	{
-	    emsg(_(e_break));
+	    emsg(_(e_break_without_while_or_for));
 	    return NULL;
 	}
 	if (scope->se_type == FOR_SCOPE || scope->se_type == WHILE_SCOPE)
diff --git a/src/vim9expr.c b/src/vim9expr.c
index ff106d1..0c3f3e5 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -1659,7 +1659,7 @@
 		if (**arg != '(')
 		{
 		    if (*skipwhite(*arg) == '(')
-			emsg(_(e_nowhitespace));
+			emsg(_(e_no_white_space_allowed_before_parenthesis));
 		    else
 			semsg(_(e_missing_parenthesis_str), *arg);
 		    return FAIL;