mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
feat(completion): support completing more string options
This commit is contained in:
parent
5821c857e0
commit
01c51a4913
@ -105,6 +105,8 @@ The following new APIs and features were added.
|
|||||||
|
|
||||||
• |nvim_set_keymap()| and |nvim_del_keymap()| now support abbreviations.
|
• |nvim_set_keymap()| and |nvim_del_keymap()| now support abbreviations.
|
||||||
|
|
||||||
|
• Better cmdline completion for string option value. |complete-set-option|
|
||||||
|
|
||||||
• Builtin TUI can now recognize "super" (|<D-|) and "meta" (|<T-|) modifiers in a
|
• Builtin TUI can now recognize "super" (|<D-|) and "meta" (|<T-|) modifiers in a
|
||||||
terminal emulator that supports |tui-csiu|.
|
terminal emulator that supports |tui-csiu|.
|
||||||
|
|
||||||
|
@ -287,13 +287,12 @@ Options:
|
|||||||
'diffopt' "linematch" feature
|
'diffopt' "linematch" feature
|
||||||
'exrc' searches for ".nvim.lua", ".nvimrc", or ".exrc" files. The
|
'exrc' searches for ".nvim.lua", ".nvimrc", or ".exrc" files. The
|
||||||
user is prompted whether to trust the file.
|
user is prompted whether to trust the file.
|
||||||
'fillchars' flags: "msgsep", "horiz", "horizup",
|
'fillchars' flags: "msgsep", "horiz", "horizup", "horizdown",
|
||||||
"horizdown", "vertleft", "vertright", "verthoriz"
|
"vertleft", "vertright", "verthoriz"
|
||||||
'foldcolumn' supports up to 9 dynamic/fixed columns
|
'foldcolumn' supports up to 9 dynamic/fixed columns
|
||||||
'guicursor' works in the terminal (TUI)
|
'guicursor' works in the terminal (TUI)
|
||||||
'inccommand' shows interactive results for |:substitute|-like commands
|
'inccommand' shows interactive results for |:substitute|-like commands
|
||||||
and |:command-preview| commands
|
and |:command-preview| commands
|
||||||
'jumpoptions' "stack" behavior
|
|
||||||
'jumpoptions' "view" tries to restore the |mark-view| when moving through
|
'jumpoptions' "view" tries to restore the |mark-view| when moving through
|
||||||
the |jumplist|, |changelist|, |alternate-file| or using |mark-motions|.
|
the |jumplist|, |changelist|, |alternate-file| or using |mark-motions|.
|
||||||
'laststatus' global statusline support
|
'laststatus' global statusline support
|
||||||
@ -304,6 +303,7 @@ Options:
|
|||||||
'signcolumn' supports up to 9 dynamic/fixed columns
|
'signcolumn' supports up to 9 dynamic/fixed columns
|
||||||
'statuscolumn' full control of columns using 'statusline' format
|
'statuscolumn' full control of columns using 'statusline' format
|
||||||
'tabline' %@Func@foo%X can call any function on mouse-click
|
'tabline' %@Func@foo%X can call any function on mouse-click
|
||||||
|
'termpastefilter'
|
||||||
'ttimeout', 'ttimeoutlen' behavior was simplified
|
'ttimeout', 'ttimeoutlen' behavior was simplified
|
||||||
'winblend' pseudo-transparency in floating windows |api-floatwin|
|
'winblend' pseudo-transparency in floating windows |api-floatwin|
|
||||||
'winhighlight' window-local highlights
|
'winhighlight' window-local highlights
|
||||||
@ -382,6 +382,7 @@ Upstreamed features *nvim-upstreamed*
|
|||||||
These Nvim features were later integrated into Vim.
|
These Nvim features were later integrated into Vim.
|
||||||
|
|
||||||
- 'fillchars' flags: "eob"
|
- 'fillchars' flags: "eob"
|
||||||
|
- 'jumpoptions' "stack" behavior
|
||||||
- 'wildoptions' flags: "pum" enables popupmenu for wildmode completion
|
- 'wildoptions' flags: "pum" enables popupmenu for wildmode completion
|
||||||
- |<Cmd>|
|
- |<Cmd>|
|
||||||
- |WinClosed|
|
- |WinClosed|
|
||||||
|
@ -2598,7 +2598,7 @@ static int ExpandOther(char *pat, expand_T *xp, regmatch_T *rmp, char ***matches
|
|||||||
{ EXPAND_MENUNAMES, get_menu_names, false, true },
|
{ EXPAND_MENUNAMES, get_menu_names, false, true },
|
||||||
{ EXPAND_SYNTAX, get_syntax_name, true, true },
|
{ EXPAND_SYNTAX, get_syntax_name, true, true },
|
||||||
{ EXPAND_SYNTIME, get_syntime_arg, true, true },
|
{ EXPAND_SYNTIME, get_syntime_arg, true, true },
|
||||||
{ EXPAND_HIGHLIGHT, (ExpandFunc)get_highlight_name, true, false },
|
{ EXPAND_HIGHLIGHT, get_highlight_name, true, false },
|
||||||
{ EXPAND_EVENTS, expand_get_event_name, true, false },
|
{ EXPAND_EVENTS, expand_get_event_name, true, false },
|
||||||
{ EXPAND_AUGROUP, expand_get_augroup_name, true, false },
|
{ EXPAND_AUGROUP, expand_get_augroup_name, true, false },
|
||||||
{ EXPAND_SIGN, get_sign_name, true, true },
|
{ EXPAND_SIGN, get_sign_name, true, true },
|
||||||
|
@ -2283,10 +2283,10 @@ static void highlight_list_two(int cnt, int attr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Function given to ExpandGeneric() to obtain the list of group names.
|
/// Function given to ExpandGeneric() to obtain the list of group names.
|
||||||
const char *get_highlight_name(expand_T *const xp, int idx)
|
char *get_highlight_name(expand_T *const xp, int idx)
|
||||||
FUNC_ATTR_WARN_UNUSED_RESULT
|
FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
return get_highlight_name_ext(xp, idx, true);
|
return (char *)get_highlight_name_ext(xp, idx, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Obtain a highlight group name.
|
/// Obtain a highlight group name.
|
||||||
|
@ -2935,6 +2935,7 @@ return {
|
|||||||
"[1-9]": to display a fixed number of columns
|
"[1-9]": to display a fixed number of columns
|
||||||
See |folding|.
|
See |folding|.
|
||||||
]=],
|
]=],
|
||||||
|
expand_cb = 'expand_set_foldcolumn',
|
||||||
full_name = 'foldcolumn',
|
full_name = 'foldcolumn',
|
||||||
redraw = { 'current_window' },
|
redraw = { 'current_window' },
|
||||||
scope = { 'window' },
|
scope = { 'window' },
|
||||||
@ -4082,6 +4083,7 @@ return {
|
|||||||
'redrawtime') then 'inccommand' is automatically disabled until
|
'redrawtime') then 'inccommand' is automatically disabled until
|
||||||
|Command-line-mode| is done.
|
|Command-line-mode| is done.
|
||||||
]=],
|
]=],
|
||||||
|
expand_cb = 'expand_set_inccommand',
|
||||||
full_name = 'inccommand',
|
full_name = 'inccommand',
|
||||||
scope = { 'global' },
|
scope = { 'global' },
|
||||||
short_desc = N_('Live preview of substitution'),
|
short_desc = N_('Live preview of substitution'),
|
||||||
@ -5552,6 +5554,7 @@ return {
|
|||||||
< Will make Nvim scroll 5 lines at a time when scrolling vertically, and
|
< Will make Nvim scroll 5 lines at a time when scrolling vertically, and
|
||||||
scroll 2 columns at a time when scrolling horizontally.
|
scroll 2 columns at a time when scrolling horizontally.
|
||||||
]=],
|
]=],
|
||||||
|
expand_cb = 'expand_set_mousescroll',
|
||||||
full_name = 'mousescroll',
|
full_name = 'mousescroll',
|
||||||
list = 'comma',
|
list = 'comma',
|
||||||
scope = { 'global' },
|
scope = { 'global' },
|
||||||
@ -8780,6 +8783,7 @@ return {
|
|||||||
|
|
||||||
C1 Control characters 0x80...0x9F
|
C1 Control characters 0x80...0x9F
|
||||||
]=],
|
]=],
|
||||||
|
expand_cb = 'expand_set_termpastefilter',
|
||||||
full_name = 'termpastefilter',
|
full_name = 'termpastefilter',
|
||||||
list = 'onecomma',
|
list = 'onecomma',
|
||||||
scope = { 'global' },
|
scope = { 'global' },
|
||||||
@ -9749,7 +9753,7 @@ return {
|
|||||||
{
|
{
|
||||||
abbreviation = 'winhl',
|
abbreviation = 'winhl',
|
||||||
alloced = true,
|
alloced = true,
|
||||||
cb = 'did_set_winhl',
|
cb = 'did_set_winhighlight',
|
||||||
defaults = { if_true = '' },
|
defaults = { if_true = '' },
|
||||||
deny_duplicates = true,
|
deny_duplicates = true,
|
||||||
desc = [=[
|
desc = [=[
|
||||||
@ -9771,8 +9775,9 @@ return {
|
|||||||
set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC
|
set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC
|
||||||
<
|
<
|
||||||
]=],
|
]=],
|
||||||
|
expand_cb = 'expand_set_winhighlight',
|
||||||
full_name = 'winhighlight',
|
full_name = 'winhighlight',
|
||||||
list = 'onecomma',
|
list = 'onecommacolon',
|
||||||
redraw = { 'current_window' },
|
redraw = { 'current_window' },
|
||||||
scope = { 'window' },
|
scope = { 'window' },
|
||||||
short_desc = N_('Setup window-local highlights'),
|
short_desc = N_('Setup window-local highlights'),
|
||||||
|
@ -1538,6 +1538,15 @@ const char *did_set_foldcolumn(optset_T *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int expand_set_foldcolumn(optexpand_T *args, int *numMatches, char ***matches)
|
||||||
|
{
|
||||||
|
return expand_set_opt_string(args,
|
||||||
|
p_fdc_values,
|
||||||
|
ARRAY_SIZE(p_fdc_values) - 1,
|
||||||
|
numMatches,
|
||||||
|
matches);
|
||||||
|
}
|
||||||
|
|
||||||
/// The 'foldexpr' option is changed.
|
/// The 'foldexpr' option is changed.
|
||||||
const char *did_set_foldexpr(optset_T *args)
|
const char *did_set_foldexpr(optset_T *args)
|
||||||
{
|
{
|
||||||
@ -1691,6 +1700,15 @@ const char *did_set_inccommand(optset_T *args FUNC_ATTR_UNUSED)
|
|||||||
return did_set_opt_strings(p_icm, p_icm_values, false);
|
return did_set_opt_strings(p_icm, p_icm_values, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int expand_set_inccommand(optexpand_T *args, int *numMatches, char ***matches)
|
||||||
|
{
|
||||||
|
return expand_set_opt_string(args,
|
||||||
|
p_icm_values,
|
||||||
|
ARRAY_SIZE(p_icm_values) - 1,
|
||||||
|
numMatches,
|
||||||
|
matches);
|
||||||
|
}
|
||||||
|
|
||||||
/// The 'isident' or the 'iskeyword' or the 'isprint' or the 'isfname' option is
|
/// The 'isident' or the 'iskeyword' or the 'isprint' or the 'isfname' option is
|
||||||
/// changed.
|
/// changed.
|
||||||
const char *did_set_isopt(optset_T *args)
|
const char *did_set_isopt(optset_T *args)
|
||||||
@ -1943,6 +1961,16 @@ const char *did_set_mousescroll(optset_T *args FUNC_ATTR_UNUSED)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int expand_set_mousescroll(optexpand_T *args, int *numMatches, char ***matches)
|
||||||
|
{
|
||||||
|
static char *(p_mousescroll_values[]) = { "hor:", "ver:", NULL };
|
||||||
|
return expand_set_opt_string(args,
|
||||||
|
p_mousescroll_values,
|
||||||
|
ARRAY_SIZE(p_mousescroll_values) - 1,
|
||||||
|
numMatches,
|
||||||
|
matches);
|
||||||
|
}
|
||||||
|
|
||||||
/// The 'nrformats' option is changed.
|
/// The 'nrformats' option is changed.
|
||||||
const char *did_set_nrformats(optset_T *args)
|
const char *did_set_nrformats(optset_T *args)
|
||||||
{
|
{
|
||||||
@ -2412,6 +2440,15 @@ const char *did_set_termpastefilter(optset_T *args FUNC_ATTR_UNUSED)
|
|||||||
return did_set_opt_flags(p_tpf, p_tpf_values, &tpf_flags, true);
|
return did_set_opt_flags(p_tpf, p_tpf_values, &tpf_flags, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int expand_set_termpastefilter(optexpand_T *args, int *numMatches, char ***matches)
|
||||||
|
{
|
||||||
|
return expand_set_opt_string(args,
|
||||||
|
p_tpf_values,
|
||||||
|
ARRAY_SIZE(p_tpf_values) - 1,
|
||||||
|
numMatches,
|
||||||
|
matches);
|
||||||
|
}
|
||||||
|
|
||||||
/// The 'titlestring' or the 'iconstring' option is changed.
|
/// The 'titlestring' or the 'iconstring' option is changed.
|
||||||
static const char *did_set_titleiconstring(optset_T *args, int flagval)
|
static const char *did_set_titleiconstring(optset_T *args, int flagval)
|
||||||
{
|
{
|
||||||
@ -2625,7 +2662,8 @@ const char *did_set_winbar(optset_T *args)
|
|||||||
return did_set_statustabline_rulerformat(args, false, false);
|
return did_set_statustabline_rulerformat(args, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *did_set_winhl(optset_T *args)
|
/// The 'winhighlight' option is changed.
|
||||||
|
const char *did_set_winhighlight(optset_T *args)
|
||||||
{
|
{
|
||||||
win_T *win = (win_T *)args->os_win;
|
win_T *win = (win_T *)args->os_win;
|
||||||
if (!parse_winhl_opt(win)) {
|
if (!parse_winhl_opt(win)) {
|
||||||
@ -2634,6 +2672,11 @@ const char *did_set_winhl(optset_T *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int expand_set_winhighlight(optexpand_T *args, int *numMatches, char ***matches)
|
||||||
|
{
|
||||||
|
return expand_set_opt_generic(args, get_highlight_name, numMatches, matches);
|
||||||
|
}
|
||||||
|
|
||||||
// When 'syntax' is set, load the syntax of that name
|
// When 'syntax' is set, load the syntax of that name
|
||||||
static void do_syntax_autocmd(buf_T *buf, bool value_changed)
|
static void do_syntax_autocmd(buf_T *buf, bool value_changed)
|
||||||
{
|
{
|
||||||
|
@ -941,6 +941,15 @@ describe('completion', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('cmdline completion supports various string options', function()
|
||||||
|
eq('auto', funcs.getcompletion('set foldcolumn=', 'cmdline')[2])
|
||||||
|
eq({'nosplit', 'split'}, funcs.getcompletion('set inccommand=', 'cmdline'))
|
||||||
|
eq({'ver:3,hor:6', 'hor:', 'ver:'}, funcs.getcompletion('set mousescroll=', 'cmdline'))
|
||||||
|
eq('BS', funcs.getcompletion('set termpastefilter=', 'cmdline')[2])
|
||||||
|
eq('SpecialKey', funcs.getcompletion('set winhighlight=', 'cmdline')[1])
|
||||||
|
eq('SpecialKey', funcs.getcompletion('set winhighlight=NonText:', 'cmdline')[1])
|
||||||
|
end)
|
||||||
|
|
||||||
describe('from the commandline window', function()
|
describe('from the commandline window', function()
|
||||||
it('is cleared after CTRL-C', function ()
|
it('is cleared after CTRL-C', function ()
|
||||||
feed('q:')
|
feed('q:')
|
||||||
|
Loading…
Reference in New Issue
Block a user