Mercurial > vim
changeset 18522:dfdc29643c91 v8.1.2255
patch 8.1.2255: ":term ++shell" does not work on MS-Windows
Commit: https://github.com/vim/vim/commit/2d6d76f9cd3c5dca0676491d7d60ff7685942487
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 4 23:18:35 2019 +0100
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 04 Nov 2019 23:30:03 +0100 |
parents | cecc669d952c |
children | b5f70c3bcb33 |
files | src/terminal.c src/testdir/test_terminal.vim src/version.c |
diffstat | 3 files changed, 39 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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! + 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! + 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()