Last active
December 17, 2015 18:19
-
-
Save DeaR/5652245 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r 6702a3ddd7e2 runtime/doc/options.txt | |
--- a/runtime/doc/options.txt Thu May 30 15:38:24 2013 +0200 | |
+++ b/runtime/doc/options.txt Fri May 31 00:37:37 2013 +0900 | |
@@ -1785,6 +1785,14 @@ | |
completion in the preview window. Only works in | |
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' string (default: "") | |
diff -r 6702a3ddd7e2 src/edit.c | |
--- a/src/edit.c Thu May 30 15:38:24 2013 +0200 | |
+++ b/src/edit.c Fri May 31 00:37:37 2013 +0900 | |
@@ -105,6 +105,10 @@ | |
static int compl_get_longest = FALSE; /* put longest common string | |
in compl_leader */ | |
+static int compl_select_type = 0; /* 0: select & insert | |
+ 1: noinsert | |
+ 2: noselect */ | |
+ | |
static int compl_used_match; /* Selected one of the matches. When | |
FALSE the match was edited or using | |
the longest common string. */ | |
@@ -3641,8 +3645,15 @@ | |
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET | |
|| (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; | |
+ | |
+ if (strstr((char *)p_cot, "noselect") != NULL) | |
+ compl_select_type = 2; | |
+ else if (strstr((char *)p_cot, "noinsert") != NULL) | |
+ compl_select_type = 1; | |
+ else | |
+ compl_select_type = 0; | |
} | |
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET) | |
@@ -4622,6 +4633,7 @@ | |
compl_T *found_compl = NULL; | |
int found_end = FALSE; | |
int advance; | |
+ int started = compl_started; | |
/* When user complete function return -1 for findstart which is next | |
* time of 'always', compl_shown_match become NULL. */ | |
@@ -4703,7 +4715,7 @@ | |
return -1; | |
} | |
- if (advance) | |
+ if (compl_select_type != 2 && advance) | |
{ | |
if (compl_shows_dir == BACKWARD) | |
--compl_pending; | |
@@ -4755,7 +4767,11 @@ | |
} | |
/* Insert the text of the new completion, or the compl_leader. */ | |
- if (insert_match) | |
+ if (compl_select_type == 1 && !started) { | |
+ ins_bytes(compl_orig_text + ins_compl_len()); | |
+ compl_used_match = FALSE; | |
+ } | |
+ else if (insert_match) | |
{ | |
if (!compl_get_longest || compl_used_match) | |
ins_compl_insert(); | |
@@ -4792,7 +4808,10 @@ | |
/* Enter will select a match when the match wasn't inserted and the popup | |
* menu is visible. */ | |
- compl_enter_selects = !insert_match && compl_match_array != NULL; | |
+ if (compl_select_type == 1 && !started) | |
+ compl_enter_selects = TRUE; | |
+ else | |
+ compl_enter_selects = !insert_match && compl_match_array != NULL; | |
/* | |
* Show the file name for the match (if any) | |
@@ -4867,7 +4886,7 @@ | |
} | |
} | |
} | |
- if (compl_pending != 0 && !got_int) | |
+ if (compl_pending != 0 && !got_int && compl_select_type != 1) | |
{ | |
int todo = compl_pending > 0 ? compl_pending : -compl_pending; | |
diff -r 6702a3ddd7e2 src/option.c | |
--- a/src/option.c Thu May 30 15:38:24 2013 +0200 | |
+++ b/src/option.c Fri May 31 00:37:37 2013 +0900 | |
@@ -2994,7 +2994,7 @@ | |
static char *(p_fcl_values[]) = {"all", NULL}; | |
#endif | |
#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 | |
static void set_option_default __ARGS((int, int opt_flags, int compatible)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment