summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mbyte.c3
-rw-r--r--src/option.c20
-rw-r--r--src/proto/option.pro1
-rw-r--r--src/testdir/test_options.vim8
-rw-r--r--src/version.c2
5 files changed, 31 insertions, 3 deletions
diff --git a/src/mbyte.c b/src/mbyte.c
index 4b78eee0e..fb0c4820b 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -733,8 +733,7 @@ codepage_invalid:
// When using Unicode, set default for 'fileencodings'.
if (enc_utf8 && !option_was_set((char_u *)"fencs"))
- set_string_option_direct((char_u *)"fencs", -1,
- (char_u *)"ucs-bom,utf-8,default,latin1", OPT_FREE, 0);
+ set_fencs_unicode();
#if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && defined(FEAT_GETTEXT)
// GNU gettext 0.10.37 supports this feature: set the codeset used for
diff --git a/src/option.c b/src/option.c
index 33d29a1fc..dd44fe4ac 100644
--- a/src/option.c
+++ b/src/option.c
@@ -535,6 +535,19 @@ set_init_1(int clean_arg)
#endif
}
+static char_u *fencs_utf8_default = (char_u *)"ucs-bom,utf-8,default,latin1";
+
+/*
+ * Set the "fileencodings" option to the default value for when 'encoding' is
+ * utf-8.
+ */
+ void
+set_fencs_unicode()
+{
+ set_string_option_direct((char_u *)"fencs", -1, fencs_utf8_default,
+ OPT_FREE, 0);
+}
+
/*
* Set an option to its default value.
* This does not take care of side effects!
@@ -558,9 +571,12 @@ set_option_default(
dvi = ((flags & P_VI_DEF) || compatible) ? VI_DEFAULT : VIM_DEFAULT;
if (flags & P_STRING)
{
+ // 'fencs' default value depends on 'encoding'
+ if (options[opt_idx].var == (char_u *)&p_fencs && enc_utf8)
+ set_fencs_unicode();
// Use set_string_option_direct() for local options to handle
// freeing and allocating the value.
- if (options[opt_idx].indir != PV_NONE)
+ else if (options[opt_idx].indir != PV_NONE)
set_string_option_direct(NULL, opt_idx,
options[opt_idx].def_val[dvi], opt_flags, 0);
else
@@ -1684,6 +1700,8 @@ do_set(
#endif
newval = term_bg_default();
}
+ else if ((char_u **)varp == &p_fencs && enc_utf8)
+ newval = fencs_utf8_default;
// expand environment variables and ~ (since the
// default value was already expanded, only
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 8d672aac0..25cfb6541 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -1,5 +1,6 @@
/* option.c */
void set_init_1(int clean_arg);
+void set_fencs_unicode(void);
void set_string_default(char *name, char_u *val);
void set_number_default(char *name, long val);
void set_local_options_default(win_T *wp, int do_buffer);
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index d64042645..2f64d1287 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -1140,6 +1140,14 @@ func Test_opt_default()
call assert_equal('vt', &formatoptions)
set formatoptions&vim
call assert_equal('tcq', &formatoptions)
+
+ call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
+ set fencs=latin1
+ set fencs&
+ call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
+ set fencs=latin1
+ set all&
+ call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
endfunc
" Test for the 'cmdheight' option
diff --git a/src/version.c b/src/version.c
index 441826b95..b685257e5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2993,
+/**/
2992,
/**/
2991,