encoding: don't allow changing encoding after startup scripts

This commit is contained in:
Björn Linse 2015-08-29 16:11:56 +02:00
parent dc9652e68d
commit 6769438cd1
3 changed files with 17 additions and 3 deletions

View File

@ -633,6 +633,10 @@ EXTERN int silent_mode INIT(= FALSE);
/* set to TRUE when "-s" commandline argument /* set to TRUE when "-s" commandline argument
* used for ex */ * used for ex */
// Set to true when sourcing of startup scripts (nvimrc) is done.
// Used for options that cannot be changed after startup scripts.
EXTERN bool did_source_startup_scripts INIT(= false);
EXTERN pos_T VIsual; /* start position of active Visual selection */ EXTERN pos_T VIsual; /* start position of active Visual selection */
EXTERN int VIsual_active INIT(= FALSE); EXTERN int VIsual_active INIT(= FALSE);
/* whether Visual mode is active */ /* whether Visual mode is active */
@ -1078,6 +1082,8 @@ EXTERN garray_T error_ga
* Excluded are errors that are only used once and debugging messages. * Excluded are errors that are only used once and debugging messages.
*/ */
EXTERN char_u e_abort[] INIT(= N_("E470: Command aborted")); EXTERN char_u e_abort[] INIT(= N_("E470: Command aborted"));
EXTERN char_u e_afterinit[] INIT(= N_(
"E905: Cannot set this option after startup"));
EXTERN char_u e_api_spawn_failed[] INIT(= N_("E903: Could not spawn API job")); EXTERN char_u e_api_spawn_failed[] INIT(= N_("E903: Could not spawn API job"));
EXTERN char_u e_argreq[] INIT(= N_("E471: Argument required")); EXTERN char_u e_argreq[] INIT(= N_("E471: Argument required"));
EXTERN char_u e_backslash[] INIT(= N_("E10: \\ should be followed by /, ? or &")); EXTERN char_u e_backslash[] INIT(= N_("E10: \\ should be followed by /, ? or &"));

View File

@ -1911,6 +1911,7 @@ static void source_startup_scripts(mparm_T *parmp)
need_wait_return = TRUE; need_wait_return = TRUE;
secure = 0; secure = 0;
} }
did_source_startup_scripts = true;
TIME_MSG("sourcing vimrc file(s)"); TIME_MSG("sourcing vimrc file(s)");
} }

View File

@ -575,6 +575,12 @@ void set_init_1(void)
mb_init(); mb_init();
} }
// Don't change &encoding when resetting to defaults with ":set all&".
opt_idx = findoption((char_u *)"encoding");
if (opt_idx >= 0) {
options[opt_idx].flags |= P_NODEFAULT;
}
/* Set the default for 'helplang'. */ /* Set the default for 'helplang'. */
set_helplang_default(get_mess_lang()); set_helplang_default(get_mess_lang());
} }
@ -2271,10 +2277,11 @@ did_set_string_option (
else if (varp == &p_ei) { else if (varp == &p_ei) {
if (check_ei() == FAIL) if (check_ei() == FAIL)
errmsg = e_invarg; errmsg = e_invarg;
}
/* 'encoding' and 'fileencoding' */ /* 'encoding' and 'fileencoding' */
else if (varp == &p_enc || gvarp == &p_fenc) { } else if (varp == &p_enc || gvarp == &p_fenc) {
if (gvarp == &p_fenc) { if (varp == &p_enc && did_source_startup_scripts) {
errmsg = e_afterinit;
} else if (gvarp == &p_fenc) {
if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL) if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL)
errmsg = e_modifiable; errmsg = e_modifiable;
else if (vim_strchr(*varp, ',') != NULL) else if (vim_strchr(*varp, ',') != NULL)