diff options
author | James McCoy <jamessan@jamessan.com> | 2022-05-01 19:15:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-01 19:15:11 -0400 |
commit | 371dfb1746325ff9f219d4a42262e6409b951362 (patch) | |
tree | a8bd51910dd60e2e3b1ccb38d31d2ca6eb7504b9 /src | |
parent | c04b979331dcbf80c35d4d4027a2ba3e05224968 (diff) | |
parent | e038625b87dda2389d004017bd2dcf2b65bc40f6 (diff) | |
download | rneovim-371dfb1746325ff9f219d4a42262e6409b951362.tar.gz rneovim-371dfb1746325ff9f219d4a42262e6409b951362.tar.bz2 rneovim-371dfb1746325ff9f219d4a42262e6409b951362.zip |
Merge pull request #18294 from mhinz/mac/simpler-locale-fallback
fix(mac): use same $LANG fallback mechanism as Vim
Diffstat (limited to 'src')
-rwxr-xr-x | src/nvim/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/nvim/os/lang.c | 60 |
2 files changed, 17 insertions, 47 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 64de2ec7e0..2cf1bda45f 100755 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -16,8 +16,8 @@ if(WIN32) # tell MinGW compiler to enable wmain set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -municode") elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework CoreFoundation") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -framework CoreFoundation") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework CoreServices") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -framework CoreServices") endif() set(TOUCHES_DIR ${PROJECT_BINARY_DIR}/touches) diff --git a/src/nvim/os/lang.c b/src/nvim/os/lang.c index b63faacaae..28f43ff3af 100644 --- a/src/nvim/os/lang.c +++ b/src/nvim/os/lang.c @@ -3,9 +3,10 @@ #ifdef __APPLE__ # define Boolean CFBoolean // Avoid conflict with API's Boolean -# include <CoreFoundation/CFLocale.h> -# include <CoreFoundation/CFString.h> +# define FileInfo CSFileInfo // Avoid conflict with API's Fileinfo +# include <CoreServices/CoreServices.h> # undef Boolean +# undef FileInfo #endif #include "auto/config.h" @@ -21,55 +22,24 @@ void lang_init(void) { #ifdef __APPLE__ if (os_getenv("LANG") == NULL) { - const char *lang_region = NULL; - CFTypeRef cf_lang_region = NULL; - - CFLocaleRef cf_locale = CFLocaleCopyCurrent(); - if (cf_locale) { - cf_lang_region = CFLocaleGetValue(cf_locale, kCFLocaleIdentifier); - CFRetain(cf_lang_region); - lang_region = CFStringGetCStringPtr(cf_lang_region, - kCFStringEncodingUTF8); - CFRelease(cf_locale); - } else { - // Use the primary language defined in Preferences -> Language & Region - CFArrayRef cf_langs = CFLocaleCopyPreferredLanguages(); - if (cf_langs && CFArrayGetCount(cf_langs) > 0) { - cf_lang_region = CFArrayGetValueAtIndex(cf_langs, 0); - CFRetain(cf_lang_region); - CFRelease(cf_langs); - lang_region = CFStringGetCStringPtr(cf_lang_region, - kCFStringEncodingUTF8); - } else { - ELOG("$LANG is empty and your primary language cannot be inferred."); - return; - } - } - char buf[50] = { 0 }; - bool set_lang; - if (lang_region) { - set_lang = true; - xstrlcpy(buf, lang_region, sizeof(buf)); - } else { - set_lang = CFStringGetCString(cf_lang_region, buf, 40, - kCFStringEncodingUTF8); - } - if (set_lang) { + + // $LANG is not set, either because it was unset or Nvim was started + // from the Dock. Query the system locale. + if (LocaleRefGetPartString(NULL, + kLocaleLanguageMask | kLocaleLanguageVariantMask | + kLocaleRegionMask | kLocaleRegionVariantMask, + sizeof(buf) - 10, buf) == noErr && *buf) { if (strcasestr(buf, "utf-8") == NULL) { xstrlcat(buf, ".UTF-8", sizeof(buf)); } os_setenv("LANG", buf, true); + setlocale(LC_ALL, ""); + // Make sure strtod() uses a decimal point, not a comma. + setlocale(LC_NUMERIC, "C"); + } else { + ELOG("$LANG is empty and the macOS primary language cannot be inferred."); } - CFRelease(cf_lang_region); -# ifdef HAVE_LOCALE_H - setlocale(LC_ALL, ""); - -# ifdef LC_NUMERIC - // Make sure strtod() uses a decimal point, not a comma. - setlocale(LC_NUMERIC, "C"); -# endif -# endif } #endif } |