diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-11-24 21:50:24 -0500 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-11-24 23:37:10 -0500 |
commit | 7a0a2eb310a5568d6ee743d65f5ae12f60111c6e (patch) | |
tree | 34c2e9ab6b14c119fab68805b1e28cbda16c731b /src/nvim/ex_docmd.c | |
parent | edb194f3306b6b8a9df7a06c15a60425911c7e85 (diff) | |
download | rneovim-7a0a2eb310a5568d6ee743d65f5ae12f60111c6e.tar.gz rneovim-7a0a2eb310a5568d6ee743d65f5ae12f60111c6e.tar.bz2 rneovim-7a0a2eb310a5568d6ee743d65f5ae12f60111c6e.zip |
vim-patch:8.1.1732: completion in cmdwin does not work for buffer-local commands
Problem: Completion in cmdwin does not work for buffer-local commands.
Solution: Use the right buffer. (closes vim/vim#4711)
https://github.com/vim/vim/commit/f03e328348f87e1fe8ce4aad2a6a4237b9f78ce3
Diffstat (limited to 'src/nvim/ex_docmd.c')
-rw-r--r-- | src/nvim/ex_docmd.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 641edf4610..f18ebffa0a 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -5133,9 +5133,11 @@ static void uc_list(char_u *name, size_t name_len) ucmd_T *cmd; int len; uint32_t a; - garray_T *gap; - gap = &curbuf->b_ucmds; + // In cmdwin, the alternative buffer should be used. + garray_T *gap = (cmdwin_type != 0 && get_cmdline_type() == NUL) + ? &prevwin->w_buffer->b_ucmds + : &curbuf->b_ucmds; for (;; ) { for (i = 0; i < gap->ga_len; ++i) { cmd = USER_CMD_GA(gap, i); @@ -5984,13 +5986,21 @@ char_u *get_user_cmd_addr_type(expand_T *xp, int idx) /* * Function given to ExpandGeneric() to obtain the list of user command names. */ -char_u *get_user_commands(expand_T *xp, int idx) +char_u *get_user_commands(expand_T *xp FUNC_ATTR_UNUSED, int idx) + FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT { - if (idx < curbuf->b_ucmds.ga_len) - return USER_CMD_GA(&curbuf->b_ucmds, idx)->uc_name; - idx -= curbuf->b_ucmds.ga_len; - if (idx < ucmds.ga_len) + // In cmdwin, the alternative buffer should be used. + const buf_T *const buf = (cmdwin_type != 0 && get_cmdline_type() == NUL) + ? prevwin->w_buffer + : curbuf; + + if (idx < buf->b_ucmds.ga_len) { + return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; + } + idx -= buf->b_ucmds.ga_len; + if (idx < ucmds.ga_len) { return USER_CMD(idx)->uc_name; + } return NULL; } |