vim-patch:8.2.1757: Mac: default locale is lacking the encoding (#12994)

vim-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 vim/vim#7022)
a5fe91e6dc

Cherry-pick test_environ.vim changes from patch 8.2.1432.
This commit is contained in:
Jan Edmund Lazo
2020-09-28 20:20:48 -04:00
committed by GitHub
parent f520c1ef85
commit 6f2138eb03
2 changed files with 36 additions and 5 deletions

View File

@@ -43,14 +43,20 @@ void lang_init(void)
} }
} }
char buf[50] = { 0 };
bool set_lang;
if (lang_region) { if (lang_region) {
os_setenv("LANG", lang_region, true); set_lang = true;
xstrlcpy(buf, lang_region, sizeof(buf));
} else { } else {
char buf[20] = { 0 }; set_lang = CFStringGetCString(cf_lang_region, buf, 40,
if (CFStringGetCString(cf_lang_region, buf, 20, kCFStringEncodingUTF8);
kCFStringEncodingUTF8)) {
os_setenv("LANG", buf, true);
} }
if (set_lang) {
if (strcasestr(buf, "utf-8") == NULL) {
xstrlcat(buf, ".UTF-8", sizeof(buf));
}
os_setenv("LANG", buf, true);
} }
CFRelease(cf_lang_region); CFRelease(cf_lang_region);
# ifdef HAVE_LOCALE_H # ifdef HAVE_LOCALE_H

View File

@@ -1,5 +1,9 @@
" Test for environment variables.
scriptencoding utf-8 scriptencoding utf-8
source check.vim
func Test_environ() func Test_environ()
unlet! $TESTENV unlet! $TESTENV
call assert_equal(0, has_key(environ(), 'TESTENV')) call assert_equal(0, has_key(environ(), 'TESTENV'))
@@ -42,3 +46,24 @@ func Test_external_env()
endif endif
call assert_equal('', result) call assert_equal('', result)
endfunc 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