diff src/edit.c @ 825:6675076019ae v7.0d

updated for version 7.0d
author vimboss
date Mon, 10 Apr 2006 14:55:34 +0000
parents 23f82b5d2814
children 1cdd2661f34c
line wrap: on
line diff
--- a/src/edit.c
+++ b/src/edit.c
@@ -90,6 +90,10 @@ static compl_T    *compl_first_match = N
 static compl_T    *compl_curr_match = NULL;
 static compl_T    *compl_shown_match = NULL;
 
+/* After using a cursor key <Enter> selects a match in the popup menu,
+ * otherwise it inserts a line break. */
+static int	  compl_enter_selects = FALSE;
+
 /* When "compl_leader" is not NULL only matches that start with this string
  * are used. */
 static char_u	  *compl_leader = NULL;
@@ -726,8 +730,10 @@ edit(cmdchar, startln, count)
 		    continue;
 		}
 
-		/* Pressing CTRL-Y selects the current match. */
-		if (c == Ctrl_Y)
+		/* Pressing CTRL-Y selects the current match.  Shen
+		 * compl_enter_selects is set the Enter key does the same. */
+		if (c == Ctrl_Y || (compl_enter_selects
+				   && (c == CAR || c == K_KENTER || c == NL)))
 		{
 		    ins_compl_delete();
 		    ins_compl_insert();
@@ -2915,6 +2921,7 @@ ins_compl_clear()
     edit_submode_extra = NULL;
     vim_free(compl_orig_text);
     compl_orig_text = NULL;
+    compl_enter_selects = FALSE;
 }
 
 /*
@@ -2976,6 +2983,7 @@ ins_compl_bs()
 	/* Show the popup menu with a different set of matches. */
 	ins_compl_show_pum();
 	compl_used_match = FALSE;
+	compl_enter_selects = FALSE;
 
 	return TRUE;
     }
@@ -3014,6 +3022,7 @@ ins_compl_addleader(c)
 	ins_compl_del_pum();
 	ins_compl_show_pum();
 	compl_used_match = FALSE;
+	compl_enter_selects = FALSE;
 	ins_compl_set_original_text(compl_leader);
     }
 }
@@ -3277,8 +3286,11 @@ ins_compl_prep(c)
 	    auto_format(FALSE, TRUE);
 
 	    /* If the popup menu is displayed pressing CTRL-Y means accepting
-	     * the selection without inserting anything. */
-	    if (c == Ctrl_Y && pum_visible())
+	     * the selection without inserting anything.  When
+	     * compl_enter_selects is set the Enter key does the same. */
+	    if ((c == Ctrl_Y || (compl_enter_selects
+				   && (c == CAR || c == K_KENTER || c == NL)))
+		    && pum_visible())
 		retval = TRUE;
 
 	    /* CTRL-E means completion is Ended, go back to the typed text. */
@@ -3298,6 +3310,7 @@ ins_compl_prep(c)
 	    compl_matches = 0;
 	    msg_clr_cmdline();		/* necessary for "noshowmode" */
 	    ctrl_x_mode = 0;
+	    compl_enter_selects = FALSE;
 	    if (edit_submode != NULL)
 	    {
 		edit_submode = NULL;
@@ -4049,6 +4062,10 @@ ins_compl_next(allow_get_expansion, coun
 	ins_compl_delete();
     }
 
+    /* Enter will select a match when the match wasn't inserted and the popup
+     * menu is visislbe. */
+    compl_enter_selects = !insert_match && compl_match_array != NULL;
+
     /*
      * Show the file name for the match (if any)
      * Truncate the file name to avoid a wait for return.
@@ -7277,7 +7294,7 @@ ins_ctrl_g()
 		  break;
 
 	/* CTRL-G u: start new undoable edit */
-	case 'u': u_sync();
+	case 'u': u_sync(TRUE);
 		  ins_need_undo = TRUE;
 
 		  /* Need to reset Insstart, esp. because a BS that joins