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)
f03e328348
This commit is contained in:
Jan Edmund Lazo
2019-11-24 21:50:24 -05:00
parent edb194f330
commit 7a0a2eb310
2 changed files with 35 additions and 7 deletions

View File

@@ -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;
}