From 1d3ee1c44186c211611abd03bdb4e38004b14ff4 Mon Sep 17 00:00:00 2001 From: TJ DeVries Date: Fri, 11 Jun 2021 11:13:43 -0400 Subject: [PATCH] fix(vim.opt): #14708 Now lets you put duplicate values in wildmode --- runtime/lua/vim/_meta.lua | 7 +++++-- src/nvim/option.c | 1 + src/nvim/options.lua | 2 +- test/functional/lua/vim_spec.lua | 10 +++++++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/runtime/lua/vim/_meta.lua b/runtime/lua/vim/_meta.lua index 02d1154df4..85861420aa 100644 --- a/runtime/lua/vim/_meta.lua +++ b/runtime/lua/vim/_meta.lua @@ -325,9 +325,12 @@ local convert_value_to_vim = (function() return result end, - [OptionTypes.ARRAY] = function(_, value) + [OptionTypes.ARRAY] = function(info, value) if type(value) == "string" then return value end - return table.concat(remove_duplicate_values(value), ",") + if not info.allows_duplicates then + value = remove_duplicate_values(value) + end + return table.concat(value, ",") end, [OptionTypes.MAP] = function(_, value) diff --git a/src/nvim/option.c b/src/nvim/option.c index f57abe89cc..388bedc043 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -7765,6 +7765,7 @@ static Dictionary vimoption2dict(vimoption_T *opt) } PUT(dict, "type", CSTR_TO_OBJ(type)); PUT(dict, "default", def); + PUT(dict, "allows_duplicates", BOOL(!(opt->flags & P_NODUP))); return dict; } diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 86dec74f56..0b09686675 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -3152,7 +3152,7 @@ return { full_name='wildmode', abbreviation='wim', short_desc=N_("mode for 'wildchar' command-line expansion"), type='string', list='onecomma', scope={'global'}, - deny_duplicates=true, + deny_duplicates=false, vim=true, varname='p_wim', defaults={if_true={vi="", vim="full"}} diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua index 836f514433..51a0b58172 100644 --- a/test/functional/lua/vim_spec.lua +++ b/test/functional/lua/vim_spec.lua @@ -1569,7 +1569,15 @@ describe('lua stdlib', function() eq(wildignore, 'super_first,first,foo') end) - end) + it('should not remove duplicates from wildmode: #14708', function() + local wildmode = exec_lua [[ + vim.opt.wildmode = {"full", "list", "full"} + return vim.o.wildmode + ]] + + eq(wildmode, 'full,list,full') + end) + end) -- vim.opt it('vim.cmd', function() exec_lua [[