forked from aniani/vim
patch 9.0.0567: 'completeopt' "longest" is not used for complete()
Problem: 'completeopt' "longest" is not used for complete(). Solution: Also use "longest" for complete(). (Bjorn Linse, closes #11206)
This commit is contained in:
@@ -153,6 +153,8 @@ static int compl_no_insert = FALSE; // FALSE: select & insert
|
|||||||
// TRUE: noinsert
|
// TRUE: noinsert
|
||||||
static int compl_no_select = FALSE; // FALSE: select & insert
|
static int compl_no_select = FALSE; // FALSE: select & insert
|
||||||
// TRUE: noselect
|
// TRUE: noselect
|
||||||
|
static int compl_longest = FALSE; // FALSE: insert full match
|
||||||
|
// TRUE: insert longest prefix
|
||||||
|
|
||||||
// Selected one of the matches. When FALSE the match was edited or using the
|
// Selected one of the matches. When FALSE the match was edited or using the
|
||||||
// longest common string.
|
// longest common string.
|
||||||
@@ -1042,10 +1044,13 @@ completeopt_was_set(void)
|
|||||||
{
|
{
|
||||||
compl_no_insert = FALSE;
|
compl_no_insert = FALSE;
|
||||||
compl_no_select = FALSE;
|
compl_no_select = FALSE;
|
||||||
|
compl_longest = FALSE;
|
||||||
if (strstr((char *)p_cot, "noselect") != NULL)
|
if (strstr((char *)p_cot, "noselect") != NULL)
|
||||||
compl_no_select = TRUE;
|
compl_no_select = TRUE;
|
||||||
if (strstr((char *)p_cot, "noinsert") != NULL)
|
if (strstr((char *)p_cot, "noinsert") != NULL)
|
||||||
compl_no_insert = TRUE;
|
compl_no_insert = TRUE;
|
||||||
|
if (strstr((char *)p_cot, "longest") != NULL)
|
||||||
|
compl_longest = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2383,7 +2388,7 @@ ins_compl_prep(int c)
|
|||||||
if (ctrl_x_mode_not_defined_yet()
|
if (ctrl_x_mode_not_defined_yet()
|
||||||
|| (ctrl_x_mode_normal() && !compl_started))
|
|| (ctrl_x_mode_normal() && !compl_started))
|
||||||
{
|
{
|
||||||
compl_get_longest = (strstr((char *)p_cot, "longest") != NULL);
|
compl_get_longest = compl_longest;
|
||||||
compl_used_match = TRUE;
|
compl_used_match = TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2864,6 +2869,7 @@ set_completion(colnr_T startcol, list_T *list)
|
|||||||
ins_compl_prep(' ');
|
ins_compl_prep(' ');
|
||||||
ins_compl_clear();
|
ins_compl_clear();
|
||||||
ins_compl_free();
|
ins_compl_free();
|
||||||
|
compl_get_longest = compl_longest;
|
||||||
|
|
||||||
compl_direction = FORWARD;
|
compl_direction = FORWARD;
|
||||||
if (startcol > curwin->w_cursor.col)
|
if (startcol > curwin->w_cursor.col)
|
||||||
@@ -2888,10 +2894,11 @@ 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;
|
||||||
if (compl_no_insert || compl_no_select)
|
int no_select = compl_no_select || compl_longest;
|
||||||
|
if (compl_no_insert || no_select)
|
||||||
{
|
{
|
||||||
ins_complete(K_DOWN, FALSE);
|
ins_complete(K_DOWN, FALSE);
|
||||||
if (compl_no_select)
|
if (no_select)
|
||||||
// Down/Up has no real effect.
|
// Down/Up has no real effect.
|
||||||
ins_complete(K_UP, FALSE);
|
ins_complete(K_UP, FALSE);
|
||||||
}
|
}
|
||||||
|
@@ -699,6 +699,26 @@ func Test_recursive_complete_func()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for using complete() with completeopt+=longest
|
||||||
|
func Test_complete_with_longest()
|
||||||
|
inoremap <f3> <cmd>call complete(1, ["iaax", "iaay", "iaaz"])<cr>
|
||||||
|
new
|
||||||
|
|
||||||
|
" default: insert first match
|
||||||
|
set completeopt&
|
||||||
|
call setline(1, ['i'])
|
||||||
|
exe "normal Aa\<f3>\<esc>"
|
||||||
|
call assert_equal('iaax', getline(1))
|
||||||
|
|
||||||
|
" with longest: insert longest prefix
|
||||||
|
set completeopt+=longest
|
||||||
|
call setline(1, ['i'])
|
||||||
|
exe "normal Aa\<f3>\<esc>"
|
||||||
|
call assert_equal('iaa', getline(1))
|
||||||
|
set completeopt&
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" Test for completing words following a completed word in a line
|
" Test for completing words following a completed word in a line
|
||||||
func Test_complete_wrapscan()
|
func Test_complete_wrapscan()
|
||||||
" complete words from another buffer
|
" complete words from another buffer
|
||||||
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
567,
|
||||||
/**/
|
/**/
|
||||||
566,
|
566,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user