From 74aef8972048c3288a3cbd6a8dadf17a8df3c08c Mon Sep 17 00:00:00 2001 From: Scott Prager Date: Mon, 13 Apr 2015 23:53:16 -0400 Subject: term: use an argument vector for termopen(). Old behaviour: termopen('cmd') would run `&shell &shcf "cmd"`, which caused the functional tests to fail on some systems due to the process not "owning" the terminal. Also, it is inconsistent with jobstart(). Modify termopen() so that &shell is not invoked, but maintain the old behaviour with :terminal. Factor the common code for building the argument vector from jobstart() and modify the functional tests to call termopen() instead of :terminal (fixes #2354). Also: * Add a 'name' option for termopen() so that `:terminal {cmd}` produces a buffer named "term//{cwd}/{cmd}" and termopen() users can customize the name. * Update the documentation. * Add functional tests for `:terminal` sinse its behaviour now differs from termopen(). Add "test/functional/fixtures/shell-test.c" and move "test/functional/job/tty-test.c" there, too. Helped-by: Justin M. Keyes <@justinmk> --- runtime/doc/eval.txt | 20 +++++++++++--------- runtime/doc/various.txt | 15 +++++++++++---- 2 files changed, 22 insertions(+), 13 deletions(-) (limited to 'runtime') diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 0284e6cab8..f151fd84ba 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -6299,15 +6299,17 @@ tempname() *tempname()* *temp-file-name* For MS-Windows forward slashes are used when the 'shellslash' option is set or when 'shellcmdflag' starts with '-'. -termopen({command}[, {opts}]) {Nvim} *termopen()* - Spawns {command} using the shell in a new pseudo-terminal - session connected to the current buffer. This function fails - if the current buffer is modified (all buffer contents are - destroyed). The {opts} dict is similar to the one passed to - |jobstart()|, but the `pty`, `width`, `height`, and `TERM` fields are - ignored: `height`/`width` are taken from the current window and - $TERM is set to "xterm-256color". Returns the same values as - |jobstart()|. +termopen({argv}[, {opts}]) {Nvim} *termopen()* + Spawns {argv}(list) in a new pseudo-terminal session connected + to the current buffer. This function fails if the current + buffer is modified (all buffer contents are destroyed). + + The {opts} dict is similar to the one passed to |jobstart()|, + but the `pty`, `width`, `height`, and `TERM` fields are + ignored: `height`/`width` are taken from the current window + and `$TERM` is set to "xterm-256color". An additional option, + `name`, can be used to give the terminal a specific name. + Returns the same values as |jobstart()|. See |nvim-terminal-emulator| for more information. diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index 8ddfdf272f..13bc089824 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -223,11 +223,18 @@ g8 Print the hex values of the bytes used in the :sh[ell] Removed. |vim-differences| {Nvim} *:term* *:terminal* -:term[inal][!] {cmd} Spawns {command} using the current value of 'shell' - in a new terminal buffer. This is equivalent to: > - - :enew | call termopen('{cmd}') | startinsert +:term[inal][!] {cmd} Spawns {cmd} using the current value of 'shell' and + 'shellcmdflag' in a new terminal buffer. This is + equivalent to: > + + :enew + :call termopen([&sh, &shcf, '{cmd}'], + \{'name':'{cmd}'}) + :startinsert < + If no {cmd} is given, 'shellcmdflag' will not be sent + to |termopen()|. + Like |:enew|, it will fail if the current buffer is modified, but can be forced with "!". See |termopen()| and |nvim-terminal-emulator| for more information. -- cgit