Mercurial > vim
diff src/terminal.c @ 12724:17c257dd2438 v8.0.1240
patch 8.0.1240: MS-Windows: term_start() does not support environment
commit https://github.com/vim/vim/commit/ba6febd380c931b92361a189e85b19ed467c9c64
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Oct 30 21:56:23 2017 +0100
patch 8.0.1240: MS-Windows: term_start() does not support environment
Problem: MS-Windows: term_start() does not support environment.
Solution: Implement the environment argument. (Yasuhiro Matsumoto, closes
#2264)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 30 Oct 2017 22:00:06 +0100 |
parents | f58755eb453e |
children | 4d9cdb1d8bea |
line wrap: on
line diff
--- a/src/terminal.c +++ b/src/terminal.c @@ -46,9 +46,18 @@ * - 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? @@ -3390,6 +3399,7 @@ term_and_job_init( { WCHAR *cmd_wchar = NULL; WCHAR *cwd_wchar = NULL; + WCHAR *env_wchar = NULL; channel_T *channel = NULL; job_T *job = NULL; DWORD error; @@ -3398,7 +3408,7 @@ term_and_job_init( 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) @@ -3408,10 +3418,10 @@ term_and_job_init( 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); @@ -3419,6 +3429,12 @@ term_and_job_init( 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) @@ -3446,7 +3462,7 @@ term_and_job_init( NULL, cmd_wchar, cwd_wchar, - NULL, + env_wchar, &winpty_err); if (spawn_config == NULL) goto failed; @@ -3519,7 +3535,9 @@ term_and_job_init( 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)