changeset 22417:68115baaf9e4 v8.2.1757

patch 8.2.1757: Mac: default locale is lacking the encoding Commit: https://github.com/vim/vim/commit/a5fe91e6dc610bc823bc3201e2c88179989b13fb Author: Bram Moolenaar <Bram@vim.org> Date: Sun Sep 27 16:03:15 2020 +0200 patch 8.2.1757: Mac: default locale is lacking the encoding Problem: Mac: default locale is lacking the encoding. Solution: Add ".UTF-8 to the locale. (Yee Cheng Chin, closes https://github.com/vim/vim/issues/7022)
author Bram Moolenaar <Bram@vim.org>
date Sun, 27 Sep 2020 16:15:03 +0200
parents f94f157b4a1d
children 04fb79390baf
files src/os_mac_conv.c src/testdir/test_environ.vim src/version.c
diffstat 3 files changed, 30 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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, "");
--- 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
--- 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,