summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@zimbu.org>2010-02-03 15:14:22 +0100
committerBram Moolenaar <bram@zimbu.org>2010-02-03 15:14:22 +0100
commit637b48f7fdee503746e84bfc1b9262456fed45e0 (patch)
tree61a3d13a7e027f78bbeb411be23c17bfab94306d
parent7494b7dd724ccb3c29b020c1a8c52b0f128bd515 (diff)
downloadvim-7.2.353.tar.gz
updated for version 7.2.353v7.2.353v7-2-353
Problem: No command line completion for ":profile". Solution: Complete the subcommand and file name.
-rw-r--r--src/ex_cmds2.c73
-rw-r--r--src/ex_docmd.c5
-rw-r--r--src/ex_getln.c3
-rw-r--r--src/proto/ex_cmds2.pro2
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
6 files changed, 86 insertions, 0 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 81feac83..94c1f74b 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1115,6 +1115,79 @@ ex_profile(eap)
}
}
+/* Command line expansion for :profile. */
+static enum
+{
+ PEXP_SUBCMD, /* expand :profile sub-commands */
+ PEXP_FUNC, /* expand :profile func {funcname} */
+} pexpand_what;
+
+static char *pexpand_cmds[] = {
+ "start",
+#define PROFCMD_START 0
+ "pause",
+#define PROFCMD_PAUSE 1
+ "continue",
+#define PROFCMD_CONTINUE 2
+ "func",
+#define PROFCMD_FUNC 3
+ "file",
+#define PROFCMD_FILE 4
+ NULL
+#define PROFCMD_LAST 5
+};
+
+/*
+ * Function given to ExpandGeneric() to obtain the profile command
+ * specific expansion.
+ */
+ char_u *
+get_profile_name(xp, idx)
+ expand_T *xp UNUSED;
+ int idx;
+{
+ switch (pexpand_what)
+ {
+ case PEXP_SUBCMD:
+ return (char_u *)pexpand_cmds[idx];
+ /* case PEXP_FUNC: TODO */
+ default:
+ return NULL;
+ }
+}
+
+/*
+ * Handle command line completion for :profile command.
+ */
+ void
+set_context_in_profile_cmd(xp, arg)
+ expand_T *xp;
+ char_u *arg;
+{
+ char_u *end_subcmd;
+ int len;
+
+ /* Default: expand subcommands. */
+ xp->xp_context = EXPAND_PROFILE;
+ pexpand_what = PEXP_SUBCMD;
+ xp->xp_pattern = arg;
+
+ end_subcmd = skiptowhite(arg);
+ if (*end_subcmd == NUL)
+ return;
+
+ len = end_subcmd - arg;
+ if (len == 5 && STRNCMP(arg, "start", 5) == 0)
+ {
+ xp->xp_context = EXPAND_FILES;
+ xp->xp_pattern = skipwhite(end_subcmd);
+ return;
+ }
+
+ /* TODO: expand function names after "func" */
+ xp->xp_context = EXPAND_NOTHING;
+}
+
/*
* Dump the profiling info.
*/
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 016a2b5e..aeb7774b 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3804,6 +3804,11 @@ set_one_cmd_context(xp, buff)
xp->xp_context = EXPAND_NOTHING;
break;
#endif
+#if defined(FEAT_PROFILE)
+ case CMD_profile:
+ set_context_in_profile_cmd(xp, arg);
+ break;
+#endif
#endif /* FEAT_CMDL_COMPL */
diff --git a/src/ex_getln.c b/src/ex_getln.c
index d5761f33..e8056f84 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4522,6 +4522,9 @@ ExpandFromContext(xp, pat, num_file, file, options)
#ifdef FEAT_SIGNS
{EXPAND_SIGN, get_sign_name, TRUE},
#endif
+#ifdef FEAT_PROFILE
+ {EXPAND_PROFILE, get_profile_name, TRUE},
+#endif
#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
{EXPAND_LANGUAGE, get_lang_arg, TRUE},
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 88cfeb7a..2c89fe3f 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -24,6 +24,8 @@ void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
void ex_profile __ARGS((exarg_T *eap));
+char_u *get_profile_name __ARGS((expand_T *xp, int idx));
+void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
void profile_dump __ARGS((void));
void script_prof_save __ARGS((proftime_T *tm));
void script_prof_restore __ARGS((proftime_T *tm));
diff --git a/src/version.c b/src/version.c
index a823253b..6b1b88a3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 353,
+/**/
352,
/**/
351,
diff --git a/src/vim.h b/src/vim.h
index 88541e5f..804070ef 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -718,6 +718,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define EXPAND_SHELLCMD 32
#define EXPAND_CSCOPE 33
#define EXPAND_SIGN 34
+#define EXPAND_PROFILE 35
/* Values for exmode_active (0 is no exmode) */
#define EXMODE_NORMAL 1