mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Add complete() noinsert/noselect support #2792
This commit is contained in:
parent
6270d431aa
commit
be66c0b357
@ -2250,7 +2250,14 @@ void set_completion(colnr_T startcol, list_T *list)
|
|||||||
compl_cont_status = 0;
|
compl_cont_status = 0;
|
||||||
|
|
||||||
compl_curr_match = compl_first_match;
|
compl_curr_match = compl_first_match;
|
||||||
ins_complete(Ctrl_N);
|
if (compl_no_insert) {
|
||||||
|
ins_complete(K_DOWN);
|
||||||
|
} else {
|
||||||
|
ins_complete(Ctrl_N);
|
||||||
|
if (compl_no_select) {
|
||||||
|
ins_complete(Ctrl_P);
|
||||||
|
}
|
||||||
|
}
|
||||||
ui_flush();
|
ui_flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2980,16 +2987,17 @@ static int ins_compl_prep(int c)
|
|||||||
compl_get_longest = (strstr((char *)p_cot, "longest") != NULL);
|
compl_get_longest = (strstr((char *)p_cot, "longest") != NULL);
|
||||||
compl_used_match = TRUE;
|
compl_used_match = TRUE;
|
||||||
|
|
||||||
if (strstr((char *)p_cot, "noselect") != NULL) {
|
}
|
||||||
compl_no_insert = FALSE;
|
|
||||||
compl_no_select = TRUE;
|
if (strstr((char *)p_cot, "noselect") != NULL) {
|
||||||
} else if (strstr((char *)p_cot, "noinsert") != NULL) {
|
compl_no_insert = FALSE;
|
||||||
compl_no_insert = TRUE;
|
compl_no_select = TRUE;
|
||||||
compl_no_select = FALSE;
|
} else if (strstr((char *)p_cot, "noinsert") != NULL) {
|
||||||
} else {
|
compl_no_insert = TRUE;
|
||||||
compl_no_insert = FALSE;
|
compl_no_select = FALSE;
|
||||||
compl_no_select = FALSE;
|
} else {
|
||||||
}
|
compl_no_insert = FALSE;
|
||||||
|
compl_no_select = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET) {
|
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET) {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
local helpers = require('test.functional.helpers')
|
local helpers = require('test.functional.helpers')
|
||||||
local clear, feed, execute = helpers.clear, helpers.feed, helpers.execute
|
local clear, feed, execute = helpers.clear, helpers.feed, helpers.execute
|
||||||
local eval, eq, neq = helpers.eval, helpers.eq, helpers.neq
|
local eval, eq, neq = helpers.eval, helpers.eq, helpers.neq
|
||||||
@ -54,25 +55,42 @@ describe('completion', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
describe('completeopt', function()
|
describe('completeopt', function()
|
||||||
|
before_each(function()
|
||||||
|
source([[
|
||||||
|
function! TestComplete() abort
|
||||||
|
call complete(1, ['foo'])
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
]])
|
||||||
|
end)
|
||||||
|
|
||||||
it('inserts the first candidate if default', function()
|
it('inserts the first candidate if default', function()
|
||||||
execute('set completeopt+=menuone')
|
execute('set completeopt+=menuone')
|
||||||
feed('ifoo<ESC>o<C-x><C-n>bar<ESC>')
|
feed('ifoo<ESC>o<C-x><C-n>bar<ESC>')
|
||||||
eq('foobar', eval('getline(2)'))
|
eq('foobar', eval('getline(2)'))
|
||||||
|
feed('o<C-r>=TestComplete()<CR><ESC>')
|
||||||
|
eq('foo', eval('getline(3)'))
|
||||||
end)
|
end)
|
||||||
it('selects the first candidate if noinsert', function()
|
it('selects the first candidate if noinsert', function()
|
||||||
execute('set completeopt+=menuone,noinsert')
|
execute('set completeopt+=menuone,noinsert')
|
||||||
feed('ifoo<ESC>o<C-x><C-n><C-y><ESC>')
|
feed('ifoo<ESC>o<C-x><C-n><C-y><ESC>')
|
||||||
eq('foo', eval('getline(2)'))
|
eq('foo', eval('getline(2)'))
|
||||||
|
feed('o<C-r>=TestComplete()<CR><C-y><ESC>')
|
||||||
|
eq('foo', eval('getline(3)'))
|
||||||
end)
|
end)
|
||||||
it('does not insert the first candidate if noselect', function()
|
it('does not insert the first candidate if noselect', function()
|
||||||
execute('set completeopt+=menuone,noselect')
|
execute('set completeopt+=menuone,noselect')
|
||||||
feed('ifoo<ESC>o<C-x><C-n>bar<ESC>')
|
feed('ifoo<ESC>o<C-x><C-n>bar<ESC>')
|
||||||
eq('bar', eval('getline(2)'))
|
eq('bar', eval('getline(2)'))
|
||||||
|
feed('o<C-r>=TestComplete()<CR>bar<ESC>')
|
||||||
|
eq('bar', eval('getline(3)'))
|
||||||
end)
|
end)
|
||||||
it('does not select/insert the first candidate if noselect and noinsert', function()
|
it('does not select/insert the first candidate if noselect and noinsert', function()
|
||||||
execute('set completeopt+=menuone,noselect,noinsert')
|
execute('set completeopt+=menuone,noselect,noinsert')
|
||||||
feed('ifoo<ESC>o<C-x><C-n><ESC>')
|
feed('ifoo<ESC>o<C-x><C-n><ESC>')
|
||||||
eq('', eval('getline(2)'))
|
eq('', eval('getline(2)'))
|
||||||
|
feed('o<C-r>=TestComplete()<CR><ESC>')
|
||||||
|
eq('', eval('getline(3)'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user