mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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()
|
||||
|
@@ -741,6 +741,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2255,
|
||||
/**/
|
||||
2254,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user