diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2014-10-28 23:14:15 -0400 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2014-10-28 23:14:15 -0400 |
commit | 72c54db443aad66dd5f71ce25d7ec8896715e233 (patch) | |
tree | bb13b201a2934a8a5a3bb60f3f1025fbf2707ac9 | |
parent | c28adf15e6c2079c732bb77fb99c50b80a4d7fe2 (diff) | |
parent | 250298884bb0c86847131cb872dcc9865115f8eb (diff) | |
download | rneovim-72c54db443aad66dd5f71ce25d7ec8896715e233.tar.gz rneovim-72c54db443aad66dd5f71ce25d7ec8896715e233.tar.bz2 rneovim-72c54db443aad66dd5f71ce25d7ec8896715e233.zip |
Merge #1342 "signs bugfix"
-rw-r--r-- | src/nvim/api/vim.c | 13 | ||||
-rw-r--r-- | src/nvim/eval.c | 3 | ||||
-rw-r--r-- | src/nvim/eval.h | 1 | ||||
-rw-r--r-- | src/nvim/ex_cmds.c | 16 | ||||
-rw-r--r-- | test/functional/ex_cmds/sign_spec.lua | 25 |
5 files changed, 50 insertions, 8 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index c90e7039ce..9afefd6fa3 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -96,6 +96,19 @@ String vim_replace_termcodes(String str, Boolean from_part, Boolean do_lt, return cstr_as_string(ptr); } +String vim_command_output(String str, Error *err) +{ + do_cmdline_cmd((char_u *)"redir => v:command_output"); + vim_command(str, err); + do_cmdline_cmd((char_u *)"redir END"); + + if (err->set) { + return (String) STRING_INIT; + } + + return cstr_to_string((char *)get_vim_var_str(VV_COMMAND_OUTPUT)); +} + /// Evaluates the expression str using the vim internal expression /// evaluator (see |expression|). /// Dictionaries and lists are recursively expanded. diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 61606012ee..59fb82134d 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -424,7 +424,8 @@ static struct vimvar { {VV_NAME("oldfiles", VAR_LIST), 0}, {VV_NAME("windowid", VAR_NUMBER), VV_RO}, {VV_NAME("progpath", VAR_STRING), VV_RO}, - {VV_NAME("job_data", VAR_LIST), 0} + {VV_NAME("job_data", VAR_LIST), 0}, + {VV_NAME("command_output", VAR_STRING), 0} }; /* shorthand */ diff --git a/src/nvim/eval.h b/src/nvim/eval.h index 2f36a46f70..e96106dfb3 100644 --- a/src/nvim/eval.h +++ b/src/nvim/eval.h @@ -64,6 +64,7 @@ enum { VV_WINDOWID, VV_PROGPATH, VV_JOB_DATA, + VV_COMMAND_OUTPUT, VV_LEN, /* number of v: vars */ }; diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 5db950f120..f5fa16a139 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -5908,12 +5908,13 @@ void ex_sign(exarg_T *eap) arg = skipwhite(arg); if (idx == SIGNCMD_UNPLACE && *arg == NUL) { - /* ":sign unplace {id}": remove placed sign by number */ - FOR_ALL_BUFFERS(buf) { - if ((lnum = buf_delsign(buf, id)) != 0) - update_debug_sign(buf, lnum); - return; - } + // ":sign unplace {id}": remove placed sign by number + FOR_ALL_BUFFERS(buf) { + if ((lnum = buf_delsign(buf, id)) != 0) { + update_debug_sign(buf, lnum); + } + } + return; } } } @@ -5923,7 +5924,7 @@ void ex_sign(exarg_T *eap) * Leave "arg" pointing to {fname}. */ - buf_T *buf = NULL; + buf_T *buf = NULL; for (;;) { if (STRNCMP(arg, "line=", 5) == 0) @@ -6343,3 +6344,4 @@ void set_context_in_sign_cmd(expand_T *xp, char_u *arg) } } +// vim: tabstop=8 diff --git a/test/functional/ex_cmds/sign_spec.lua b/test/functional/ex_cmds/sign_spec.lua new file mode 100644 index 0000000000..74e1aa4702 --- /dev/null +++ b/test/functional/ex_cmds/sign_spec.lua @@ -0,0 +1,25 @@ +local helpers = require('test.functional.helpers') +local clear, nvim, buffer, curbuf, curwin, eq, ok = + helpers.clear, helpers.nvim, helpers.buffer, helpers.curbuf, helpers.curwin, + helpers.eq, helpers.ok + +describe('sign', function() + describe('unplace {id}', function() + describe('without specifying buffer', function() + it('deletes the sign from all buffers', function() + -- place a sign with id 34 to first buffer + nvim('command', 'sign define Foo text=+ texthl=Delimiter linehl=Comment') + local buf1 = nvim('eval', 'bufnr("%")') + nvim('command', 'sign place 34 line=3 name=Foo buffer='..buf1) + -- create a second buffer and place the sign on it as well + nvim('command', 'new') + local buf2 = nvim('eval', 'bufnr("%")') + nvim('command', 'sign place 34 line=3 name=Foo buffer='..buf2) + -- now unplace without specifying a buffer + nvim('command', 'sign unplace 34') + eq("\n--- Signs ---\n", nvim('command_output', 'sign place buffer='..buf1)) + eq("\n--- Signs ---\n", nvim('command_output', 'sign place buffer='..buf2)) + end) + end) + end) +end) |