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