> From your description, I think I'd rather see this as an additional value or 
> values supported in 'completeopt'. Currently the only control over what gets 
> inserted is "longest". If it's there, only part of the match text gets 
> inserted, otherwise, the whole first match gets inserted. Why not add a 
> "noinsert" or something, and maybe a "noselect"?
> 
> I.e., you could make the list at :help 'completeopt' look like:
> 
>          menu     Use a popup menu to show the possible completions.  The
>                   menu is only shown when there is more than one match and
>                   sufficient colors are available.  |ins-completion-menu|
> 
>          menuone  Use the popup menu also when there is only one match.
>                   Useful when there is additional information about the
>                   match, e.g., what file it comes from.
> 
>          longest  Only insert the longest common text of the matches.  If
>                   the menu is displayed you can use CTRL-L to add more
>                   characters.  Whether case is ignored depends on the kind
>                   of completion.  For buffer text the 'ignorecase' option is
>                   used.
> 
>          preview  Show extra information about the currently selected
>                   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".

Thank you for the suggestion.
I updated the patch to extend completeopt.
Can you try it?

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


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));

Raspunde prin e-mail lui