mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.2009: MS-Windows: setting $LANG in gvimext only causes problems
Problem: MS-Windows: setting $LANG in gvimext only causes problems. Solution: Do not set $LANG. (Ken Takata, closes #7325)
This commit is contained in:
@@ -161,7 +161,6 @@ static char *null_libintl_bindtextdomain(const char *, const char *);
|
|||||||
static int dyn_libintl_init(char *dir);
|
static int dyn_libintl_init(char *dir);
|
||||||
static void dyn_libintl_end(void);
|
static void dyn_libintl_end(void);
|
||||||
|
|
||||||
static wchar_t *oldenv = NULL;
|
|
||||||
static HINSTANCE hLibintlDLL = 0;
|
static HINSTANCE hLibintlDLL = 0;
|
||||||
static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
|
static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
|
||||||
static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
|
static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
|
||||||
@@ -205,17 +204,17 @@ dyn_libintl_init(char *dir)
|
|||||||
if (buf != NULL && buf2 != NULL)
|
if (buf != NULL && buf2 != NULL)
|
||||||
{
|
{
|
||||||
GetEnvironmentVariableW(L"PATH", buf, len);
|
GetEnvironmentVariableW(L"PATH", buf, len);
|
||||||
#ifdef _WIN64
|
# ifdef _WIN64
|
||||||
_snwprintf(buf2, len2, L"%S\\GvimExt64;%s", dir, buf);
|
_snwprintf(buf2, len2, L"%S\\GvimExt64;%s", dir, buf);
|
||||||
#else
|
# else
|
||||||
_snwprintf(buf2, len2, L"%S\\GvimExt32;%s", dir, buf);
|
_snwprintf(buf2, len2, L"%S\\GvimExt32;%s", dir, buf);
|
||||||
#endif
|
# endif
|
||||||
SetEnvironmentVariableW(L"PATH", buf2);
|
SetEnvironmentVariableW(L"PATH", buf2);
|
||||||
hLibintlDLL = LoadLibrary(GETTEXT_DLL);
|
hLibintlDLL = LoadLibrary(GETTEXT_DLL);
|
||||||
#ifdef GETTEXT_DLL_ALT
|
# ifdef GETTEXT_DLL_ALT
|
||||||
if (!hLibintlDLL)
|
if (!hLibintlDLL)
|
||||||
hLibintlDLL = LoadLibrary(GETTEXT_DLL_ALT);
|
hLibintlDLL = LoadLibrary(GETTEXT_DLL_ALT);
|
||||||
#endif
|
# endif
|
||||||
SetEnvironmentVariableW(L"PATH", buf);
|
SetEnvironmentVariableW(L"PATH", buf);
|
||||||
}
|
}
|
||||||
free(buf);
|
free(buf);
|
||||||
@@ -273,56 +272,7 @@ null_libintl_textdomain(const char* /* domainname */)
|
|||||||
dyn_gettext_load(void)
|
dyn_gettext_load(void)
|
||||||
{
|
{
|
||||||
char szBuff[BUFSIZE];
|
char szBuff[BUFSIZE];
|
||||||
char szLang[BUFSIZE];
|
|
||||||
DWORD len;
|
DWORD len;
|
||||||
HKEY keyhandle;
|
|
||||||
int gotlang = 0;
|
|
||||||
|
|
||||||
strcpy(szLang, "LANG=");
|
|
||||||
|
|
||||||
// First try getting the language from the registry, this can be
|
|
||||||
// used to overrule the system language.
|
|
||||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
|
|
||||||
KEY_READ, &keyhandle) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
len = BUFSIZE;
|
|
||||||
if (RegQueryValueEx(keyhandle, "lang", 0, NULL, (BYTE*)szBuff, &len)
|
|
||||||
== ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
szBuff[len] = 0;
|
|
||||||
strcat(szLang, szBuff);
|
|
||||||
gotlang = 1;
|
|
||||||
}
|
|
||||||
RegCloseKey(keyhandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gotlang && getenv("LANG") == NULL)
|
|
||||||
{
|
|
||||||
// Get the language from the system.
|
|
||||||
// Could use LOCALE_SISO639LANGNAME, but it's not in Win95.
|
|
||||||
// LOCALE_SABBREVLANGNAME gives us three letters, like "enu", we use
|
|
||||||
// only the first two.
|
|
||||||
len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME,
|
|
||||||
(LPTSTR)szBuff, BUFSIZE);
|
|
||||||
if (len >= 2 && _strnicmp(szBuff, "en", 2) != 0)
|
|
||||||
{
|
|
||||||
// There are a few exceptions (probably more)
|
|
||||||
if (_strnicmp(szBuff, "cht", 3) == 0
|
|
||||||
|| _strnicmp(szBuff, "zht", 3) == 0)
|
|
||||||
strcpy(szBuff, "zh_TW");
|
|
||||||
else if (_strnicmp(szBuff, "chs", 3) == 0
|
|
||||||
|| _strnicmp(szBuff, "zhc", 3) == 0)
|
|
||||||
strcpy(szBuff, "zh_CN");
|
|
||||||
else if (_strnicmp(szBuff, "jp", 2) == 0)
|
|
||||||
strcpy(szBuff, "ja");
|
|
||||||
else
|
|
||||||
szBuff[2] = 0; // truncate to two-letter code
|
|
||||||
strcat(szLang, szBuff);
|
|
||||||
gotlang = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (gotlang)
|
|
||||||
putenv(szLang);
|
|
||||||
|
|
||||||
// Try to locate the runtime files. The path is used to find libintl.dll
|
// Try to locate the runtime files. The path is used to find libintl.dll
|
||||||
// and the vim.mo files.
|
// and the vim.mo files.
|
||||||
@@ -378,10 +328,8 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /* lpReserved */)
|
|||||||
inc_cRefThisDLL()
|
inc_cRefThisDLL()
|
||||||
{
|
{
|
||||||
#ifdef FEAT_GETTEXT
|
#ifdef FEAT_GETTEXT
|
||||||
if (g_cRefThisDll == 0) {
|
if (g_cRefThisDll == 0)
|
||||||
dyn_gettext_load();
|
dyn_gettext_load();
|
||||||
oldenv = GetEnvironmentStringsW();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
InterlockedIncrement((LPLONG)&g_cRefThisDll);
|
InterlockedIncrement((LPLONG)&g_cRefThisDll);
|
||||||
}
|
}
|
||||||
@@ -390,13 +338,8 @@ inc_cRefThisDLL()
|
|||||||
dec_cRefThisDLL()
|
dec_cRefThisDLL()
|
||||||
{
|
{
|
||||||
#ifdef FEAT_GETTEXT
|
#ifdef FEAT_GETTEXT
|
||||||
if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
|
if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
|
||||||
dyn_gettext_free();
|
dyn_gettext_free();
|
||||||
if (oldenv != NULL) {
|
|
||||||
FreeEnvironmentStringsW(oldenv);
|
|
||||||
oldenv = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
InterlockedDecrement((LPLONG)&g_cRefThisDll);
|
InterlockedDecrement((LPLONG)&g_cRefThisDll);
|
||||||
#endif
|
#endif
|
||||||
@@ -967,8 +910,8 @@ STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
|
|||||||
NULL, // Process handle not inheritable.
|
NULL, // Process handle not inheritable.
|
||||||
NULL, // Thread handle not inheritable.
|
NULL, // Thread handle not inheritable.
|
||||||
FALSE, // Set handle inheritance to FALSE.
|
FALSE, // Set handle inheritance to FALSE.
|
||||||
oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
|
0, // No creation flags.
|
||||||
oldenv, // Use unmodified environment block.
|
NULL, // Use parent's environment block.
|
||||||
NULL, // Use parent's starting directory.
|
NULL, // Use parent's starting directory.
|
||||||
&si, // Pointer to STARTUPINFO structure.
|
&si, // Pointer to STARTUPINFO structure.
|
||||||
&pi) // Pointer to PROCESS_INFORMATION structure.
|
&pi) // Pointer to PROCESS_INFORMATION structure.
|
||||||
@@ -1057,8 +1000,8 @@ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
|
|||||||
NULL, // Process handle not inheritable.
|
NULL, // Process handle not inheritable.
|
||||||
NULL, // Thread handle not inheritable.
|
NULL, // Thread handle not inheritable.
|
||||||
FALSE, // Set handle inheritance to FALSE.
|
FALSE, // Set handle inheritance to FALSE.
|
||||||
oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
|
0, // No creation flags.
|
||||||
oldenv, // Use unmodified environment block.
|
NULL, // Use parent's environment block.
|
||||||
NULL, // Use parent's starting directory.
|
NULL, // Use parent's starting directory.
|
||||||
&si, // Pointer to STARTUPINFO structure.
|
&si, // Pointer to STARTUPINFO structure.
|
||||||
&pi) // Pointer to PROCESS_INFORMATION structure.
|
&pi) // Pointer to PROCESS_INFORMATION structure.
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2009,
|
||||||
/**/
|
/**/
|
||||||
2008,
|
2008,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user