summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-27 16:03:15 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-27 16:03:15 +0200
commita5fe91e6dc610bc823bc3201e2c88179989b13fb (patch)
tree549279515623ddd6f45cfa0ba006d5fac01aeef4
parentcfcd011fcd8021da52fba62dabf7a2497f1879b7 (diff)
patch 8.2.1757: Mac: default locale is lacking the encodingv8.2.1757
Problem: Mac: default locale is lacking the encoding. Solution: Add ".UTF-8 to the locale. (Yee Cheng Chin, closes #7022)
-rw-r--r--src/os_mac_conv.c9
-rw-r--r--src/testdir/test_environ.vim21
-rw-r--r--src/version.c2
3 files changed, 30 insertions, 2 deletions
diff --git a/src/os_mac_conv.c b/src/os_mac_conv.c
index fd62124644..734f8f6c9f 100644
--- a/src/os_mac_conv.c
+++ b/src/os_mac_conv.c
@@ -570,12 +570,17 @@ mac_lang_init(void)
{
if (mch_getenv((char_u *)"LANG") == NULL)
{
- char buf[20];
+ char buf[50];
+
+ // $LANG is not set, either because it was unset or Vim was started
+ // from the Dock. Query the system locale.
if (LocaleRefGetPartString(NULL,
kLocaleLanguageMask | kLocaleLanguageVariantMask |
kLocaleRegionMask | kLocaleRegionVariantMask,
- sizeof buf, buf) == noErr && *buf)
+ sizeof(buf) - 10, buf) == noErr && *buf)
{
+ if (strcasestr(buf, "utf-8") == NULL)
+ strcat(buf, ".UTF-8");
vim_setenv((char_u *)"LANG", (char_u *)buf);
# ifdef HAVE_LOCALE_H
setlocale(LC_ALL, "");
diff --git a/src/testdir/test_environ.vim b/src/testdir/test_environ.vim
index d9f99f057f..dd34983ee5 100644
--- a/src/testdir/test_environ.vim
+++ b/src/testdir/test_environ.vim
@@ -2,6 +2,8 @@
scriptencoding utf-8
+source check.vim
+
func Test_environ()
unlet! $TESTENV
call assert_equal(0, has_key(environ(), 'TESTENV'))
@@ -45,4 +47,23 @@ func Test_external_env()
call assert_equal('', result)
endfunc
+func Test_mac_locale()
+ CheckFeature osxdarwin
+
+ " If $LANG is not set then the system locale will be used.
+ " Run Vim after unsetting all the locale environmental vars, and capture the
+ " output of :lang.
+ let lang_results = system("unset LANG; unset LC_MESSAGES; " ..
+ \ shellescape(v:progpath) ..
+ \ " --clean -esX -c 'redir @a' -c 'lang' -c 'put a' -c 'print' -c 'qa!' ")
+
+ " Check that:
+ " 1. The locale is the form of <locale>.UTF-8.
+ " 2. Check that fourth item (LC_NUMERIC) is properly set to "C".
+ " Example match: "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
+ call assert_match('"\([a-zA-Z_]\+\.UTF-8/\)\{3}C\(/[a-zA-Z_]\+\.UTF-8\)\{2}"',
+ \ lang_results,
+ \ "Default locale should have UTF-8 encoding set, and LC_NUMERIC set to 'C'")
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index a0bea6ff55..9ef77d87a0 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 */
/**/
+ 1757,
+/**/
1756,
/**/
1755,