第一候補を自動選択しない補完オプションパッチ
https://github.com/vim-jp/issues/issues/385
This file contains 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 b792349dc858 runtime/doc/options.txt | |
--- a/runtime/doc/options.txt Thu May 30 22:44:02 2013 +0200 | |
+++ b/runtime/doc/options.txt Fri May 31 15:52:21 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 b792349dc858 src/edit.c | |
--- a/src/edit.c Thu May 30 22:44:02 2013 +0200 | |
+++ b/src/edit.c Fri May 31 15:52:21 2013 +0900 | |
@@ -105,6 +105,11 @@ | |
static int compl_get_longest = FALSE; /* put longest common string | |
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 | |
FALSE the match was edited or using | |
the longest common string. */ | |
@@ -3641,8 +3646,24 @@ | |
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_no_insert = FALSE; | |
+ compl_no_select = TRUE; | |
+ } | |
+ else if (strstr((char *)p_cot, "noinsert") != NULL) | |
+ { | |
+ compl_no_insert = TRUE; | |
+ compl_no_select = FALSE; | |
+ } | |
+ else | |
+ { | |
+ compl_no_insert = FALSE; | |
+ compl_no_select = FALSE; | |
+ } | |
} | |
if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET) | |
@@ -4622,6 +4643,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 +4725,7 @@ | |
return -1; | |
} | |
- if (advance) | |
+ if (!compl_no_select && advance) | |
{ | |
if (compl_shows_dir == BACKWARD) | |
--compl_pending; | |
@@ -4755,7 +4777,11 @@ | |
} | |
/* 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) | |
ins_compl_insert(); | |
@@ -4792,7 +4818,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_no_insert && !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 +4896,7 @@ | |
} | |
} | |
} | |
- if (compl_pending != 0 && !got_int) | |
+ if (compl_pending != 0 && !got_int && !compl_no_insert) | |
{ | |
int todo = compl_pending > 0 ? compl_pending : -compl_pending; | |
diff -r b792349dc858 src/option.c | |
--- a/src/option.c Thu May 30 22:44:02 2013 +0200 | |
+++ b/src/option.c Fri May 31 15:52:21 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