Mercurial > vim
diff src/ex_getln.c @ 3503:7e4428115d2c v7.3.514
updated for version 7.3.514
Problem: No completion for :history command.
Solution: Add the completion and update the docs. Also fix ":behave"
completion. (Dominique Pelle)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Mon, 30 Apr 2012 18:48:53 +0200 |
parents | d1096a4e96bd |
children | ac2e00f917df |
line wrap: on
line diff
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -25,7 +25,7 @@ struct cmdline_info 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 @@ static int expand_showtail __ARGS((expan #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[])); +# ifdef 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)); @@ -4628,6 +4631,9 @@ ExpandFromContext(xp, pat, num_file, fil { {EXPAND_COMMANDS, get_command_name, FALSE, TRUE}, {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE}, +#ifdef 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}, @@ -5245,6 +5251,34 @@ static char *(history_names[]) = 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); + int history_name_count = sizeof(history_names) / sizeof(char *) - 1; + + if (idx < short_names_count) + { + compl[0] = (char_u)short_names[idx]; + return compl; + } + 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.