From: Bram Moolenaar Date: Mon, 4 Nov 2019 22:18:35 +0000 (+0100) Subject: patch 8.1.2255: ":term ++shell" does not work on MS-Windows X-Git-Tag: v8.1.2255 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2d6d76f9cd3c5dca0676491d7d60ff7685942487;p=vim patch 8.1.2255: ":term ++shell" does not work on MS-Windows Problem: ":term ++shell" does not work on MS-Windows. Solution: Add MS-Windows support. --- diff --git a/src/terminal.c b/src/terminal.c index 290d7c7ba..a3ca99339 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -846,21 +846,31 @@ ex_terminal(exarg_T *eap) term_start(NULL, argv, &opt, eap->forceit ? TERM_START_FORCEIT : 0); vim_free(tofree1); vim_free(tofree2); + goto theend; #else +# ifdef MSWIN + long_u cmdlen = STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10; + char_u *newcmd; + + newcmd = alloc(cmdlen); + if (newcmd == NULL) + goto theend; + tofree = newcmd; + vim_snprintf((char *)newcmd, cmdlen, "%s %s %s", p_sh, p_shcf, cmd); + cmd = newcmd; +# else emsg(_("E279: Sorry, ++shell is not supported on this system")); + goto theend; +# endif #endif } - else - { - argvar[0].v_type = VAR_STRING; - argvar[0].vval.v_string = cmd; - argvar[1].v_type = VAR_UNKNOWN; - term_start(argvar, NULL, &opt, eap->forceit ? TERM_START_FORCEIT : 0); - } - - vim_free(tofree); + argvar[0].v_type = VAR_STRING; + argvar[0].vval.v_string = cmd; + argvar[1].v_type = VAR_UNKNOWN; + term_start(argvar, NULL, &opt, eap->forceit ? TERM_START_FORCEIT : 0); theend: + vim_free(tofree); vim_free(opt.jo_eof_chars); } diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index 1a126b9e1..ba179595a 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -2215,15 +2215,25 @@ func Test_terminal_altscreen() endfunc func Test_terminal_shell_option() - CheckUnix - " exec is a shell builtin command, should fail without a shell. - term exec ls runtest.vim - call WaitForAssert({-> assert_match('job failed', term_getline(bufnr(), 1))}) - bwipe! - - term ++shell exec ls runtest.vim - call WaitForAssert({-> assert_match('runtest.vim', term_getline(bufnr(), 1))}) - bwipe! + if has('unix') + " exec is a shell builtin command, should fail without a shell. + term exec ls runtest.vim + call WaitForAssert({-> assert_match('job failed', term_getline(bufnr(), 1))}) + bwipe! + + term ++shell exec ls runtest.vim + call WaitForAssert({-> assert_match('runtest.vim', term_getline(bufnr(), 1))}) + bwipe! + elseif has('win32') + " dir is a shell builtin command, should fail without a shell. + term dir /b runtest.vim + call WaitForAssert({-> assert_match('job failed', term_getline(bufnr(), 1))}) + bwipe! + + term ++shell dir /b runtest.vim + call WaitForAssert({-> assert_match('runtest.vim', term_getline(bufnr(), 1))}) + bwipe! + endif endfunc func Test_terminal_setapi_and_call() diff --git a/src/version.c b/src/version.c index 79f35762f..4315a17e9 100644 --- a/src/version.c +++ b/src/version.c @@ -741,6 +741,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2255, /**/ 2254, /**/