]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-143 v7.2.143
authorBram Moolenaar <Bram@vim.org>
Wed, 18 Mar 2009 11:52:53 +0000 (11:52 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 18 Mar 2009 11:52:53 +0000 (11:52 +0000)
src/ex_docmd.c
src/ex_getln.c
src/if_cscope.c
src/proto/if_cscope.pro
src/version.c
src/vim.h

index 66d7fa96c7d16a84d79137f782a0ae3b3902a529..38acbfeba9ebde5faa3d9de7b764191a4cc54f4d 100644 (file)
@@ -3683,6 +3683,11 @@ set_one_cmd_context(xp, buff)
        case CMD_highlight:
            set_context_in_highlight_cmd(xp, arg);
            break;
+#ifdef FEAT_CSCOPE
+       case CMD_cscope:
+           set_context_in_cscope_cmd(xp, arg);
+           break;
+#endif
 #ifdef FEAT_LISTCMDS
        case CMD_bdelete:
        case CMD_bwipeout:
@@ -5187,6 +5192,9 @@ static struct
     {EXPAND_AUGROUP, "augroup"},
     {EXPAND_BUFFERS, "buffer"},
     {EXPAND_COMMANDS, "command"},
+#if defined(FEAT_CSCOPE)
+    {EXPAND_CSCOPE, "cscope"},
+#endif
 #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
     {EXPAND_USER_DEFINED, "custom"},
     {EXPAND_USER_LIST, "customlist"},
index 5cda65a07e466ed91107d9d54ee8028863aab960..3f1ea718016746779b6d5cead406384edf714837 100644 (file)
@@ -4518,6 +4518,9 @@ ExpandFromContext(xp, pat, num_file, file, options)
            {EXPAND_EVENTS, get_event_name, TRUE},
            {EXPAND_AUGROUP, get_augroup_name, TRUE},
 #endif
+#ifdef FEAT_CSCOPE
+           {EXPAND_CSCOPE, get_cscope_name, TRUE},
+#endif
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
        && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
            {EXPAND_LANGUAGE, get_lang_arg, TRUE},
index a9a0506b80dd85fba66f150b85c22565ce788a45..57d1984bfadf1b31317a0fdeab5d0b27a374cc9e 100644 (file)
@@ -93,12 +93,117 @@ cs_usage_msg(x)
     (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
 }
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+
+static enum
+{
+    EXP_CSCOPE_SUBCMD, /* expand ":cscope" sub-commands */
+    EXP_CSCOPE_FIND,   /* expand ":cscope find" arguments */
+    EXP_CSCOPE_KILL    /* expand ":cscope kill" arguments */
+} expand_what;
+
+/*
+ * Function given to ExpandGeneric() to obtain the cscope command
+ * expansion.
+ */
+/*ARGSUSED*/
+    char_u *
+get_cscope_name(xp, idx)
+    expand_T   *xp;
+    int                idx;
+{
+    switch (expand_what)
+    {
+    case EXP_CSCOPE_SUBCMD:
+       /* Complete with sub-commands of ":cscope":
+        * add, find, help, kill, reset, show */
+       return (char_u *)cs_cmds[idx].name;
+    case EXP_CSCOPE_FIND:
+       {
+           const char *query_type[] =
+           {
+               "c", "d", "e", "f", "g", "i", "s", "t", NULL
+           };
+
+           /* Complete with query type of ":cscope find {query_type}".
+            * {query_type} can be letters (c, d, ... t) or numbers (0, 1,
+            * ..., 8) but only complete with letters, since numbers are
+            * redundant. */
+           return (char_u *)query_type[idx];
+       }
+    case EXP_CSCOPE_KILL:
+       {
+           int                 i;
+           int                 current_idx = 0;
+           static char_u       connection[2];
+
+           /* ":cscope kill" accepts connection numbers or partial names of
+            * the pathname of the cscope database as argument.  Only complete
+            * with connection numbers. -1 can also be used to kill all
+            * connections. */
+           for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
+           {
+               if (csinfo[i].fname == NULL)
+                   continue;
+               if (current_idx++ == idx)
+               {
+                   /* Connection number fits in one character since
+                    * CSCOPE_MAX_CONNECTIONS is < 10 */
+                   connection[0] = i + '0';
+                   connection[1] = NUL;
+                   return connection;
+               }
+           }
+           return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
+       }
+    default:
+       return NULL;
+    }
+}
+
+/*
+ * Handle command line completion for :cscope command.
+ */
+    void
+set_context_in_cscope_cmd(xp, arg)
+    expand_T   *xp;
+    char_u     *arg;
+{
+    char_u     *p;
+
+    /* Default: expand subcommands */
+    xp->xp_context = EXPAND_CSCOPE;
+    expand_what = EXP_CSCOPE_SUBCMD;
+    xp->xp_pattern = arg;
+
+    /* (part of) subcommand already typed */
+    if (*arg != NUL)
+    {
+       p = skiptowhite(arg);
+       if (*p != NUL)              /* past first word */
+       {
+           xp->xp_pattern = skipwhite(p);
+           if (*skiptowhite(xp->xp_pattern) != NUL)
+               xp->xp_context = EXPAND_NOTHING;
+           else if (STRNICMP(arg, "add", p - arg) == 0)
+               xp->xp_context = EXPAND_FILES;
+           else if (STRNICMP(arg, "kill", p - arg) == 0)
+               expand_what = EXP_CSCOPE_KILL;
+           else if (STRNICMP(arg, "find", p - arg) == 0)
+               expand_what = EXP_CSCOPE_FIND;
+           else
+               xp->xp_context = EXPAND_NOTHING;
+       }
+    }
+}
+
+#endif /* FEAT_CMDL_COMPL */
+
 /*
  * PRIVATE: do_cscope_general
  *
- * find the command, print help if invalid, and the then call the
- * corresponding command function,
- * called from do_cscope and do_scscope
+ * Find the command, print help if invalid, and then call the corresponding
+ * command function.
  */
     static void
 do_cscope_general(eap, make_split)
index 555a0a4b5f779f31c5b76b56f7eba3b6736fc6a9..06885b2b6210b7d63d20a7701b15be8f99274db2 100644 (file)
@@ -1,4 +1,6 @@
 /* if_cscope.c */
+char_u *get_cscope_name __ARGS((expand_T *xp, int idx));
+void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg));
 void do_cscope __ARGS((exarg_T *eap));
 void do_scscope __ARGS((exarg_T *eap));
 void do_cstag __ARGS((exarg_T *eap));
index 8ba2de2ff0980ff46e24f2ea08e95bda1a9b1984..9a96e1a9226f16cdb83f1588c0d126c903d23e36 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    143,
 /**/
     142,
 /**/
index e8a623ea231ddbd44ef9f8ee1286bdecf2c875b1..7ea947e90dbe817307e37f63f4325635679d0043 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -708,6 +708,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define EXPAND_USER_DEFINED    30
 #define EXPAND_USER_LIST       31
 #define EXPAND_SHELLCMD                32
+#define EXPAND_CSCOPE          33
 
 /* Values for exmode_active (0 is no exmode) */
 #define EXMODE_NORMAL          1