]> granicus.if.org Git - vim/commitdiff
updated for version 7.2.353 v7.2.353
authorBram Moolenaar <Bram@vim.org>
Wed, 3 Feb 2010 14:14:22 +0000 (15:14 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 3 Feb 2010 14:14:22 +0000 (15:14 +0100)
Problem:    No command line completion for ":profile".
Solution:   Complete the subcommand and file name.

src/ex_cmds2.c
src/ex_docmd.c
src/ex_getln.c
src/proto/ex_cmds2.pro
src/version.c
src/vim.h

index 81feac83571676e3229e3b0f5af6a2eb83defd0f..94c1f74b6cb7e1224601f10d2a7a248ccbb7feda 100644 (file)
@@ -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.
  */
index 016a2b5e113a19f36e175c6592a79a98bf7a0045..aeb7774bfcc7b68cb2474aaede97f10b40e968a2 100644 (file)
@@ -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 */
 
index d5761f3384b86a92f440364572e11f2f950b2023..e8056f84aeb22dcc0930708f32989118185ca47c 100644 (file)
@@ -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},
index 88cfeb7a378e26e3b9a88442dcd303c499cfe271..2c89fe3fe517c41a720babec1066506e4d206408 100644 (file)
@@ -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));
index a823253bcd6a5d8f880979444dd907616edb06c1..6b1b88a3297502a3d772b0d104d57165d0146078 100644 (file)
@@ -681,6 +681,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    353,
 /**/
     352,
 /**/
index 88541e5f916e090cc332d916707e9cbdd045aec6..804070ef8fbf747abe6ee74b1f587c3cfe00562f 100644 (file)
--- 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