mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.876
Problem: Windows7: when using vim.exe with msys or msys2, conhost.exe (console window provider on Windows7) will freeze or crash. Solution: Make original screen buffer active, before executing external program. And when the program is finished, revert to vim's one. (Taro Muraoka)
This commit is contained in:
parent
3fe076f0fe
commit
b0262f239e
@ -234,6 +234,7 @@ static int suppress_winsize = 1; /* don't fiddle with console */
|
|||||||
|
|
||||||
static char_u *exe_path = NULL;
|
static char_u *exe_path = NULL;
|
||||||
|
|
||||||
|
static BOOL is_win7 = FALSE;
|
||||||
static BOOL win8_or_later = FALSE;
|
static BOOL win8_or_later = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -680,6 +681,9 @@ PlatformId(void)
|
|||||||
|
|
||||||
g_PlatformId = ovi.dwPlatformId;
|
g_PlatformId = ovi.dwPlatformId;
|
||||||
|
|
||||||
|
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion == 1))
|
||||||
|
is_win7 = TRUE;
|
||||||
|
|
||||||
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
|
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
|
||||||
|| ovi.dwMajorVersion > 6)
|
|| ovi.dwMajorVersion > 6)
|
||||||
win8_or_later = TRUE;
|
win8_or_later = TRUE;
|
||||||
@ -4581,11 +4585,12 @@ mch_system(char *cmd, int options)
|
|||||||
else
|
else
|
||||||
return mch_system_classic(cmd, options);
|
return mch_system_classic(cmd, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# ifdef FEAT_MBYTE
|
# ifdef FEAT_MBYTE
|
||||||
static int
|
static int
|
||||||
mch_system(char *cmd, int options)
|
mch_system1(char *cmd, int options)
|
||||||
{
|
{
|
||||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||||
{
|
{
|
||||||
@ -4600,9 +4605,31 @@ mch_system(char *cmd, int options)
|
|||||||
return system(cmd);
|
return system(cmd);
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
# define mch_system(c, o) system(c)
|
# define mch_system1(c, o) system(c)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
static int
|
||||||
|
mch_system(char *cmd, int options)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Restore non-termcap screen buffer before execute external program, and
|
||||||
|
* revert it after. Because msys and msys2's programs will cause freeze
|
||||||
|
* or crash conhost.exe (Windows's console window provider) and vim.exe,
|
||||||
|
* if active screen buffer is vim's one on Windows7.
|
||||||
|
*/
|
||||||
|
if (is_win7 && g_fTermcapMode)
|
||||||
|
SetConsoleActiveScreenBuffer(g_cbNonTermcap.handle);
|
||||||
|
|
||||||
|
ret = mch_system1(cmd, options);
|
||||||
|
|
||||||
|
if (is_win7 && g_fTermcapMode)
|
||||||
|
SetConsoleActiveScreenBuffer(g_cbTermcap.handle);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -741,6 +741,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 */
|
||||||
|
/**/
|
||||||
|
876,
|
||||||
/**/
|
/**/
|
||||||
875,
|
875,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user