* Turn the dictionary "env" into a NUL separated list that can be used as the
* environment argument of vim_create_process().
*/
- static void
-make_job_env(garray_T *gap, dict_T *env)
+ void
+win32_build_env(dict_T *env, garray_T *gap)
{
hashitem_T *hi;
int todo = (int)env->dv_hashtab.ht_used;
}
if (options->jo_env != NULL)
- make_job_env(&ga, options->jo_env);
+ win32_build_env(options->jo_env, &ga);
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
* - Redirecting output does not work on MS-Windows, Test_terminal_redir_file()
* is disabled.
* - cursor blinks in terminal on widows with a timer. (xtal8, #2142)
+ * - When closing gvim with an active terminal buffer, the dialog suggests
+ * saving the buffer. Should say something else. (Manas Thakur, #2215)
+ * Also: #2223
* - implement term_setsize()
+ * - Termdebug does not work when Vim build with mzscheme. gdb hangs.
+ * - Termdebug: issue #2154 might be avoided by adding -quiet to gdb?
+ * patch by Christian, 2017 Oct 23.
* - MS-Windows GUI: WinBar has tearoff item
* - MS-Windows GUI: still need to type a key after shell exits? #1924
+ * - What to store in a session file? Shell at the prompt would be OK to
+ * restore, but others may not. Open the window and let the user start the
+ * command?
* - add test for giving error for invalid 'termsize' value.
* - support minimal size when 'termsize' is "rows*cols".
* - support minimal size when 'termsize' is empty?
{
WCHAR *cmd_wchar = NULL;
WCHAR *cwd_wchar = NULL;
+ WCHAR *env_wchar = NULL;
channel_T *channel = NULL;
job_T *job = NULL;
DWORD error;
HANDLE child_thread_handle;
void *winpty_err;
void *spawn_config = NULL;
- garray_T ga;
+ garray_T ga_cmd, ga_env;
char_u *cmd;
if (dyn_winpty_init(TRUE) == FAIL)
cmd = argvar->vval.v_string;
else
{
- ga_init2(&ga, (int)sizeof(char*), 20);
- if (win32_build_cmd(argvar->vval.v_list, &ga) == FAIL)
+ ga_init2(&ga_cmd, (int)sizeof(char*), 20);
+ if (win32_build_cmd(argvar->vval.v_list, &ga_cmd) == FAIL)
goto failed;
- cmd = ga.ga_data;
+ cmd = ga_cmd.ga_data;
}
cmd_wchar = enc_to_utf16(cmd, NULL);
return FAIL;
if (opt->jo_cwd != NULL)
cwd_wchar = enc_to_utf16(opt->jo_cwd, NULL);
+ if (opt->jo_env != NULL)
+ {
+ ga_init2(&ga_env, (int)sizeof(char*), 20);
+ win32_build_env(opt->jo_env, &ga_env);
+ env_wchar = ga_env.ga_data;
+ }
job = job_alloc();
if (job == NULL)
NULL,
cmd_wchar,
cwd_wchar,
- NULL,
+ env_wchar,
&winpty_err);
if (spawn_config == NULL)
goto failed;
failed:
if (argvar->v_type == VAR_LIST)
- vim_free(ga.ga_data);
+ vim_free(ga_cmd.ga_data);
+ if (opt->jo_env != NULL)
+ vim_free(ga_env.ga_data);
vim_free(cmd_wchar);
vim_free(cwd_wchar);
if (spawn_config != NULL)
" Open a terminal with a shell, assign the job to g:job and return the buffer
" number.
func Run_shell_in_terminal(options)
- let buf = term_start(&shell, a:options)
+ if has('win32')
+ let buf = term_start([&shell,'/k'], a:options)
+ else
+ let buf = term_start(&shell, a:options)
+ endif
let termlist = term_list()
call assert_equal(1, len(termlist))
endfunc
func Test_terminal_env()
- if !has('unix')
- return
- endif
let g:buf = Run_shell_in_terminal({'env': {'TESTENV': 'correct'}})
" Wait for the shell to display a prompt
call WaitFor('term_getline(g:buf, 1) != ""')
- call term_sendkeys(g:buf, "echo $TESTENV\r")
+ if has('win32')
+ call term_sendkeys(g:buf, "echo %TESTENV%\r")
+ else
+ call term_sendkeys(g:buf, "echo $TESTENV\r")
+ endif
call term_wait(g:buf)
call Stop_shell_in_terminal(g:buf)
call WaitFor('getline(2) == "correct"')