Skip to content

Commit

Permalink
patch 8.1.0909: MS-Windows: using ConPTY even though it is not stable
Browse files Browse the repository at this point in the history
Problem:    MS-Windows: using ConPTY even though it is not stable.
Solution:   When ConPTY version is unstable, prefer using winpty. (Ken Takata,
            closes #3949)
  • Loading branch information
brammool committed Feb 13, 2019
1 parent 9403a21 commit d9ef1b8
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 11 deletions.
8 changes: 5 additions & 3 deletions runtime/doc/options.txt
Expand Up @@ -8112,12 +8112,14 @@ A jump table for the options with a short description can be found at |Q_op|.
window.

Possible values are:
"" use ConPTY if possible, winpty otherwise
"" use ConPTY if it is stable, winpty otherwise
"winpty" use winpty, fail if not supported
"conpty" use |ConPTY|, fail if not supported

|ConPTY| support depends on the platform (Windows 10 October 2018
edition). winpty support needs to be installed. If neither is
|ConPTY| support depends on the platform. Windows 10 October 2018
Update is the first version that supports ConPTY, however it is still
considered unstable. ConPTY might become stable in the next release
of Windows 10. winpty support needs to be installed. If neither is
supported then you cannot open a terminal window.

*'terse'* *'noterse'*
Expand Down
25 changes: 20 additions & 5 deletions src/os_win32.c
Expand Up @@ -187,6 +187,8 @@ static int win32_setattrs(char_u *name, int attrs);
static int win32_set_archive(char_u *name);

static int vtp_working = 0;
static int conpty_working = 0;
static int conpty_stable = 0;
static void vtp_flag_init();

#ifndef FEAT_GUI_W32
Expand Down Expand Up @@ -7638,9 +7640,10 @@ mch_setenv(char *var, char *value, int x)

/*
* Support for pseudo-console (ConPTY) was added in windows 10
* version 1809 (October 2018 update).
* version 1809 (October 2018 update). However, that version is unstable.
*/
#define CONPTY_FIRST_SUPPORT_BUILD MAKE_VER(10, 0, 17763)
#define CONPTY_FIRST_SUPPORT_BUILD MAKE_VER(10, 0, 17763)
#define CONPTY_STABLE_BUILD MAKE_VER(10, 0, 32767) // T.B.D.

static void
vtp_flag_init(void)
Expand All @@ -7659,10 +7662,10 @@ vtp_flag_init(void)
vtp_working = 0;
#endif

#ifdef FEAT_GUI_W32
if (ver >= CONPTY_FIRST_SUPPORT_BUILD)
vtp_working = 1;
#endif
conpty_working = 1;
if (ver >= CONPTY_STABLE_BUILD)
conpty_stable = 1;

}

Expand Down Expand Up @@ -7878,3 +7881,15 @@ has_vtp_working(void)
{
return vtp_working;
}

int
has_conpty_working(void)
{
return conpty_working;
}

int
is_conpty_stable(void)
{
return conpty_stable;
}
4 changes: 3 additions & 1 deletion src/proto/os_win32.pro
Expand Up @@ -70,7 +70,9 @@ void set_alist_count(void);
void fix_arg_enc(void);
int mch_setenv(char *var, char *value, int x);
void control_console_color_rgb(void);
int has_vtp_working(void);
int use_vtp(void);
int is_term_win32(void);
int has_vtp_working(void);
int has_conpty_working(void);
int is_conpty_stable(void);
/* vim: set ft=c : */
4 changes: 2 additions & 2 deletions src/terminal.c
Expand Up @@ -5521,7 +5521,7 @@ dyn_conpty_init(int verbose)
if (handled)
return result;

if (!has_vtp_working())
if (!has_conpty_working())
{
handled = TRUE;
result = FAIL;
Expand Down Expand Up @@ -6139,7 +6139,7 @@ term_and_job_init(

if (tty_type == NUL)
{
if (has_conpty)
if (has_conpty && (is_conpty_stable() || !has_winpty))
use_conpty = TRUE;
else if (has_winpty)
use_winpty = TRUE;
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -783,6 +783,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
909,
/**/
908,
/**/
Expand Down

0 comments on commit d9ef1b8

Please sign in to comment.