forked from aniani/vim
patch 7.4.775
Problem: It is not possible to avoid using the first item of completion. Solution: Add the "noinsert" and "noselect" values to 'completeopt'. (Shougo Matsu)
This commit is contained in:
@@ -1819,6 +1819,14 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
completion in the preview window. Only works in
|
completion in the preview window. Only works in
|
||||||
combination with "menu" or "menuone".
|
combination with "menu" or "menuone".
|
||||||
|
|
||||||
|
noinsert Do not insert any text for a match until the user selects
|
||||||
|
a match from the menu. Only works in combination with
|
||||||
|
"menu" or "menuone". No effect if "longest" is present.
|
||||||
|
|
||||||
|
noselect Do not select a match in the menu, force the user to
|
||||||
|
select one from the menu. Only works in combination with
|
||||||
|
"menu" or "menuone".
|
||||||
|
|
||||||
|
|
||||||
*'concealcursor'* *'cocu'*
|
*'concealcursor'* *'cocu'*
|
||||||
'concealcursor' 'cocu' string (default: "")
|
'concealcursor' 'cocu' string (default: "")
|
||||||
|
40
src/edit.c
40
src/edit.c
@@ -108,6 +108,11 @@ static char_u *compl_leader = NULL;
|
|||||||
static int compl_get_longest = FALSE; /* put longest common string
|
static int compl_get_longest = FALSE; /* put longest common string
|
||||||
in compl_leader */
|
in compl_leader */
|
||||||
|
|
||||||
|
static int compl_no_insert = FALSE; /* FALSE: select & insert
|
||||||
|
TRUE: noinsert */
|
||||||
|
static int compl_no_select = FALSE; /* FALSE: select & insert
|
||||||
|
TRUE: noselect */
|
||||||
|
|
||||||
static int compl_used_match; /* Selected one of the matches. When
|
static int compl_used_match; /* Selected one of the matches. When
|
||||||
FALSE the match was edited or using
|
FALSE the match was edited or using
|
||||||
the longest common string. */
|
the longest common string. */
|
||||||
@@ -2788,7 +2793,17 @@ set_completion(startcol, 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)
|
||||||
|
{
|
||||||
|
if (!compl_no_select)
|
||||||
|
ins_complete(K_DOWN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ins_complete(Ctrl_N);
|
ins_complete(Ctrl_N);
|
||||||
|
if (compl_no_select)
|
||||||
|
ins_complete(Ctrl_P);
|
||||||
|
}
|
||||||
out_flush();
|
out_flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3657,10 +3672,18 @@ ins_compl_prep(c)
|
|||||||
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET
|
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET
|
||||||
|| (ctrl_x_mode == 0 && !compl_started))
|
|| (ctrl_x_mode == 0 && !compl_started))
|
||||||
{
|
{
|
||||||
compl_get_longest = (vim_strchr(p_cot, 'l') != NULL);
|
compl_get_longest = (strstr((char *)p_cot, "longest") != NULL);
|
||||||
compl_used_match = TRUE;
|
compl_used_match = TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compl_no_insert = FALSE;
|
||||||
|
compl_no_select = FALSE;
|
||||||
|
if (strstr((char *)p_cot, "noselect") != NULL)
|
||||||
|
compl_no_select = TRUE;
|
||||||
|
if (strstr((char *)p_cot, "noinsert") != NULL)
|
||||||
|
compl_no_insert = TRUE;
|
||||||
|
|
||||||
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET)
|
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -4672,6 +4695,7 @@ ins_compl_next(allow_get_expansion, count, insert_match)
|
|||||||
compl_T *found_compl = NULL;
|
compl_T *found_compl = NULL;
|
||||||
int found_end = FALSE;
|
int found_end = FALSE;
|
||||||
int advance;
|
int advance;
|
||||||
|
int started = compl_started;
|
||||||
|
|
||||||
/* When user complete function return -1 for findstart which is next
|
/* When user complete function return -1 for findstart which is next
|
||||||
* time of 'always', compl_shown_match become NULL. */
|
* time of 'always', compl_shown_match become NULL. */
|
||||||
@@ -4753,7 +4777,7 @@ ins_compl_next(allow_get_expansion, count, insert_match)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (advance)
|
if (!compl_no_select && advance)
|
||||||
{
|
{
|
||||||
if (compl_shows_dir == BACKWARD)
|
if (compl_shows_dir == BACKWARD)
|
||||||
--compl_pending;
|
--compl_pending;
|
||||||
@@ -4805,7 +4829,12 @@ ins_compl_next(allow_get_expansion, count, insert_match)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Insert the text of the new completion, or the compl_leader. */
|
/* Insert the text of the new completion, or the compl_leader. */
|
||||||
if (insert_match)
|
if (compl_no_insert && !started)
|
||||||
|
{
|
||||||
|
ins_bytes(compl_orig_text + ins_compl_len());
|
||||||
|
compl_used_match = FALSE;
|
||||||
|
}
|
||||||
|
else if (insert_match)
|
||||||
{
|
{
|
||||||
if (!compl_get_longest || compl_used_match)
|
if (!compl_get_longest || compl_used_match)
|
||||||
ins_compl_insert();
|
ins_compl_insert();
|
||||||
@@ -4842,6 +4871,9 @@ ins_compl_next(allow_get_expansion, count, insert_match)
|
|||||||
|
|
||||||
/* Enter will select a match when the match wasn't inserted and the popup
|
/* Enter will select a match when the match wasn't inserted and the popup
|
||||||
* menu is visible. */
|
* menu is visible. */
|
||||||
|
if (compl_no_insert && !started)
|
||||||
|
compl_enter_selects = TRUE;
|
||||||
|
else
|
||||||
compl_enter_selects = !insert_match && compl_match_array != NULL;
|
compl_enter_selects = !insert_match && compl_match_array != NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -4917,7 +4949,7 @@ ins_compl_check_keys(frequency)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (compl_pending != 0 && !got_int)
|
if (compl_pending != 0 && !got_int && !compl_no_insert)
|
||||||
{
|
{
|
||||||
int todo = compl_pending > 0 ? compl_pending : -compl_pending;
|
int todo = compl_pending > 0 ? compl_pending : -compl_pending;
|
||||||
|
|
||||||
|
@@ -3054,7 +3054,7 @@ static char *(p_fdm_values[]) = {"manual", "expr", "marker", "indent", "syntax",
|
|||||||
static char *(p_fcl_values[]) = {"all", NULL};
|
static char *(p_fcl_values[]) = {"all", NULL};
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_INS_EXPAND
|
#ifdef FEAT_INS_EXPAND
|
||||||
static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", NULL};
|
static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", "noinsert", "noselect", NULL};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void set_option_default __ARGS((int, int opt_flags, int compatible));
|
static void set_option_default __ARGS((int, int opt_flags, int compatible));
|
||||||
|
@@ -741,6 +741,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 */
|
||||||
|
/**/
|
||||||
|
775,
|
||||||
/**/
|
/**/
|
||||||
774,
|
774,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user