Hi

Attached patch adds completion to Ex command :history.
Example:

  :history <C-D>
  /       =       ?       all     debug   input
  :       >       @       cmd     expr    search

It also:
- fixes spurious completion when doing :behave xterm <C-D>
- adds doc for ":history ?" in ":help history"
- adds "history" and "behave" to  :command -compl=<C-D>

Regards
-- Dominique

-- 
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
diff -r efe8b028ed2c runtime/doc/cmdline.txt
--- a/runtime/doc/cmdline.txt	Wed Feb 22 19:13:08 2012 +0100
+++ b/runtime/doc/cmdline.txt	Sun Feb 26 22:00:55 2012 +0100
@@ -330,12 +330,12 @@
 
 :his[tory] [{name}] [{first}][, [{last}]]
 		List the contents of history {name} which can be:
-		c[md]	 or :	command-line history
-		s[earch] or /	search string history
-		e[xpr]	 or =	expression register history
-		i[nput]	 or @	input line history
-		d[ebug]	 or >	debug command history
-		a[ll]		all of the above
+		c[md]	 or :		command-line history
+		s[earch] or / or ?	search string history
+		e[xpr]	 or =		expression register history
+		i[nput]	 or @		input line history
+		d[ebug]	 or >		debug command history
+		a[ll]			all of the above
 		{not in Vi}
 
 		If the numbers {first} and/or {last} are given, the respective
diff -r efe8b028ed2c runtime/doc/map.txt
--- a/runtime/doc/map.txt	Wed Feb 22 19:13:08 2012 +0100
+++ b/runtime/doc/map.txt	Sun Feb 26 22:00:55 2012 +0100
@@ -1219,6 +1219,7 @@
 
 	-complete=augroup	autocmd groups
 	-complete=buffer	buffer names
+	-complete=behave	:behave suboptions
 	-complete=color		color schemes
 	-complete=command	Ex command (and arguments)
 	-complete=compiler	compilers
@@ -1233,6 +1234,7 @@
 	-complete=function	function name
 	-complete=help		help subjects
 	-complete=highlight	highlight groups
+	-complete=history	:history suboptions
 	-complete=locale	locale names (as output of locale -a)
 	-complete=mapping	mapping name
 	-complete=menu		menus
diff -r efe8b028ed2c src/ex_docmd.c
--- a/src/ex_docmd.c	Wed Feb 22 19:13:08 2012 +0100
+++ b/src/ex_docmd.c	Sun Feb 26 22:00:55 2012 +0100
@@ -3920,7 +3920,14 @@
 #endif
 	case CMD_behave:
 	    xp->xp_context = EXPAND_BEHAVE;
+	    xp->xp_pattern = arg;
 	    break;
+#if defined(FEAT_CMDHIST)
+	case CMD_history:
+	    xp->xp_context = EXPAND_HISTORY;
+	    xp->xp_pattern = arg;
+	    break;
+#endif
 
 #endif /* FEAT_CMDL_COMPL */
 
@@ -5329,6 +5336,7 @@
 } command_complete[] =
 {
     {EXPAND_AUGROUP, "augroup"},
+    {EXPAND_BEHAVE, "behave"},
     {EXPAND_BUFFERS, "buffer"},
     {EXPAND_COLORS, "color"},
     {EXPAND_COMMANDS, "command"},
@@ -5350,6 +5358,9 @@
     {EXPAND_FUNCTIONS, "function"},
     {EXPAND_HELP, "help"},
     {EXPAND_HIGHLIGHT, "highlight"},
+#if defined(FEAT_CMDHIST)
+    {EXPAND_HISTORY, "history"},
+#endif
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
         && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
     {EXPAND_LOCALES, "locale"},
diff -r efe8b028ed2c src/ex_getln.c
--- a/src/ex_getln.c	Wed Feb 22 19:13:08 2012 +0100
+++ b/src/ex_getln.c	Sun Feb 26 22:00:55 2012 +0100
@@ -25,7 +25,7 @@
     int		cmdlen;		/* number of chars in command line */
     int		cmdpos;		/* current cursor position */
     int		cmdspos;	/* cursor column on screen */
-    int		cmdfirstc;	/* ':', '/', '?', '=' or NUL */
+    int		cmdfirstc;	/* ':', '/', '?', '=', '>' or NUL */
     int		cmdindent;	/* number of spaces before cmdline */
     char_u	*cmdprompt;	/* message in front of cmdline */
     int		cmdattr;	/* attributes for prompt */
@@ -111,6 +111,9 @@
 #ifdef FEAT_CMDL_COMPL
 static int	expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
 static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
+# if defined(FEAT_CMDHIST)
+static char_u	*get_history_arg __ARGS((expand_T *xp, int idx));
+# endif
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
 static int	ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
 static int	ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
@@ -4626,6 +4629,9 @@
 	{
 	    {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
 	    {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
+#if defined(FEAT_CMDHIST)
+	    {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
+#endif
 #ifdef FEAT_USR_CMDS
 	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
 	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
@@ -5243,6 +5249,33 @@
     NULL
 };
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+/*
+ * Function given to ExpandGeneric() to obtain the possible first
+ * arguments of the ":history command.
+ */
+    static char_u *
+get_history_arg(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    static char_u compl[2] = { NUL, NUL };
+    char *short_names = ":=@>?/";
+    int short_names_count = STRLEN(short_names);
+    if (idx < short_names_count)
+    {
+	compl[0] = (char_u)short_names[idx];
+	return compl;
+    }
+    int history_name_count = sizeof(history_names)/sizeof(char *) - 1;
+    if (idx < short_names_count + history_name_count)
+	return (char_u *)history_names[idx - short_names_count];
+    if (idx == short_names_count + history_name_count)
+	return (char_u *)"all";
+    return NULL;
+}
+#endif
+
 /*
  * init_history() - Initialize the command line history.
  * Also used to re-allocate the history when the size changes.
diff -r efe8b028ed2c src/vim.h
--- a/src/vim.h	Wed Feb 22 19:13:08 2012 +0100
+++ b/src/vim.h	Sun Feb 26 22:00:55 2012 +0100
@@ -781,6 +781,7 @@
 #define EXPAND_FILES_IN_PATH	38
 #define EXPAND_OWNSYNTAX	39
 #define EXPAND_LOCALES		40
+#define EXPAND_HISTORY		41
 
 /* Values for exmode_active (0 is no exmode) */
 #define EXMODE_NORMAL		1

Raspunde prin e-mail lui