]> granicus.if.org Git - vim/commitdiff
patch 8.1.2255: ":term ++shell" does not work on MS-Windows v8.1.2255
authorBram Moolenaar <Bram@vim.org>
Mon, 4 Nov 2019 22:18:35 +0000 (23:18 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 4 Nov 2019 22:18:35 +0000 (23:18 +0100)
Problem:    ":term ++shell" does not work on MS-Windows.
Solution:   Add MS-Windows support.

src/terminal.c
src/testdir/test_terminal.vim
src/version.c

index 290d7c7bafa0109f6667c91d7b88d5269891726b..a3ca993394584fc9311cd9e1706520b2af6d4050 100644 (file)
@@ -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);
 }
 
index 1a126b9e10c09877df91df6be25f03343a2df947..ba179595ab3ec5784110cf0d5eee83125570eb1a 100644 (file)
@@ -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()
index 79f35762f8279f261c8f020d6433320f53ca1277..4315a17e9c8ddb8805a671af3581633c83025ad2 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2255,
 /**/
     2254,
 /**/