diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-04-13 00:49:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-13 00:49:37 +0200 |
commit | 1c3a849881f45e2acb08ce99e5b33dd753f61d5d (patch) | |
tree | 8afb04002f3c2de7d381588f3b2c0803bdc9f32a | |
parent | 5e18550ddde07ce90111f7bda17d86608fbb8619 (diff) | |
download | rneovim-1c3a849881f45e2acb08ce99e5b33dd753f61d5d.tar.gz rneovim-1c3a849881f45e2acb08ce99e5b33dd753f61d5d.tar.bz2 rneovim-1c3a849881f45e2acb08ce99e5b33dd753f61d5d.zip |
API/nvim_command_output: handle :echon capture (#8265)
ref https://github.com/neovim/python-client/pull/290
-rw-r--r-- | src/nvim/api/vim.c | 18 | ||||
-rw-r--r-- | test/functional/api/vim_spec.lua | 2 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 962081cc23..07ec6e8c27 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -239,15 +239,17 @@ String nvim_command_output(String command, Error *err) } if (capture_local.ga_len > 1) { - // redir always(?) prepends a newline; remove it. - char *s = capture_local.ga_data; - assert(s[0] == '\n'); - memmove(s, s + 1, (size_t)capture_local.ga_len); - s[capture_local.ga_len - 1] = '\0'; - return (String) { // Caller will free the memory. - .data = s, - .size = (size_t)(capture_local.ga_len - 1), + String s = (String){ + .data = capture_local.ga_data, + .size = (size_t)capture_local.ga_len, }; + // redir usually (except :echon) prepends a newline. + if (s.data[0] == '\n') { + memmove(s.data, s.data + 1, s.size); + s.data[s.size - 1] = '\0'; + s.size = s.size - 1; + } + return s; // Caller will free the memory. } theend: diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 7ac20a99af..718294d941 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -73,6 +73,8 @@ describe('api', function() it('captures command output', function() eq('this is\nspinal tap', nvim('command_output', [[echo "this is\nspinal tap"]])) + eq('no line ending!', + nvim('command_output', [[echon "no line ending!"]])) end) it('captures empty command output', function() |