]> granicus.if.org Git - vim/commitdiff
updated for version 7.0221
authorBram Moolenaar <Bram@vim.org>
Sat, 11 Mar 2006 21:36:59 +0000 (21:36 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 11 Mar 2006 21:36:59 +0000 (21:36 +0000)
src/ex_cmds.c
src/proto/edit.pro

index 23dbcd5ad796742eb731f36e72b4ab4a6b2be8e5..87ea2f28a55926ca59f2a8334c937868e44bcbd8 100644 (file)
@@ -5175,8 +5175,9 @@ free_old_sub()
 #if (defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)) || defined(PROTO)
 /*
  * Set up for a tagpreview.
+ * Return TRUE when it was created.
  */
-    void
+    int
 prepare_tagpreview()
 {
     win_T      *wp;
@@ -5202,7 +5203,7 @@ prepare_tagpreview()
             */
            if (win_split(g_do_tagpreview > 0 ? g_do_tagpreview : 0, 0)
                                                                      == FAIL)
-               return;
+               return FALSE;
            curwin->w_p_pvw = TRUE;
            curwin->w_p_wfh = TRUE;
 # ifdef FEAT_SCROLLBIND
@@ -5214,8 +5215,10 @@ prepare_tagpreview()
 # ifdef FEAT_FOLDING
            curwin->w_p_fdc = 0;            /* no 'foldcolumn' */
 # endif
+           return TRUE;
        }
     }
+    return FALSE;
 }
 
 #endif
@@ -6837,11 +6840,11 @@ ex_drop(eap)
     exarg_T    *eap;
 {
     int                split = FALSE;
-    int                incurwin = FALSE;
-    char_u     *arg;
-    char_u     *first = NULL;
     win_T      *wp;
     buf_T      *buf;
+# ifdef FEAT_WINDOWS
+    tabpage_T  *tp;
+# endif
 
     /*
      * Check if the first argument is already being edited in a window.  If
@@ -6851,67 +6854,70 @@ ex_drop(eap)
      * This also ignores wildcards, since it is very unlikely the user is
      * editing a file name with a wildcard character.
      */
-    arg = vim_strsave(eap->arg);
-    if (arg != NULL)
+    set_arglist(eap->arg);
+
+# ifdef FEAT_WINDOWS
+    if (cmdmod.tab)
     {
-       /* Get the first argument, remove quotes, make it a full path. */
-       first = fix_fname(arg);
-       if (first != NULL)
+       /* ":tab drop file ...": open a tab for each argument that isn't
+        * edited in a window yet.  It's like ":tab all" but without closing
+        * windows or tabs. */
+       ex_all(eap);
+    }
+    else
+# endif
+    {
+       /* ":drop file ...": Edit the first argument.  Jump to an existing
+        * window if possible, edit in current window if the current buffer
+        * can be abandoned, otherwise open a new window. */
+       buf = buflist_findnr(ARGLIST[0].ae_fnum);
+
+       FOR_ALL_TAB_WINDOWS(tp, wp)
        {
-           buf = buflist_findname(first);
-           FOR_ALL_WINDOWS(wp)
+           if (wp->w_buffer == buf)
            {
-               if (wp->w_buffer == buf)
-               {
-                   incurwin = TRUE;
 # ifdef FEAT_WINDOWS
-                   win_enter(wp, TRUE);
-                   break;
+               goto_tabpage_tp(tp);
+               win_enter(wp, TRUE);
+#  ifdef FEAT_GUI_TABLINE
+               if (gui_use_tabline())
+                   gui_mch_set_curtab(tabpage_index(curtab));
+#  endif
 # endif
-               }
-           }
-           vim_free(first);
-
-           if (incurwin)
-           {
-               /* Already editing the file.  Redefine the argument list. */
-               set_arglist(eap->arg);
                curwin->w_arg_idx = 0;
-               vim_free(arg);
                return;
            }
        }
-       vim_free(arg);
-    }
 
-    /*
-     * Check whether the current buffer is changed. If so, we will need
-     * to split the current window or data could be lost.
-     * Skip the check if the 'hidden' option is set, as in this case the
-     * buffer won't be lost.
-     */
-    if (!P_HID(curbuf))
-    {
+       /*
+        * Check whether the current buffer is changed. If so, we will need
+        * to split the current window or data could be lost.
+        * Skip the check if the 'hidden' option is set, as in this case the
+        * buffer won't be lost.
+        */
+       if (!P_HID(curbuf))
+       {
 # ifdef FEAT_WINDOWS
-       ++emsg_off;
+           ++emsg_off;
 # endif
-       split = check_changed(curbuf, TRUE, FALSE, FALSE, FALSE);
+           split = check_changed(curbuf, TRUE, FALSE, FALSE, FALSE);
 # ifdef FEAT_WINDOWS
-       --emsg_off;
+           --emsg_off;
 # else
-       if (split)
-           return;
+           if (split)
+               return;
 # endif
-    }
+       }
 
-    /* Fake a ":snext" or ":next" command, redefine the arglist. */
-    if (split)
-    {
-       eap->cmdidx = CMD_snext;
-       eap->cmd[0] = 's';
+       /* Fake a ":sfirst" or ":first" command edit the first argument. */
+       if (split)
+       {
+           eap->cmdidx = CMD_sfirst;
+           eap->cmd[0] = 's';
+       }
+       else
+           eap->cmdidx = CMD_first;
+       ex_rewind(eap);
     }
-    else
-       eap->cmdidx = CMD_next;
-    ex_next(eap);
 }
 #endif
index aa12b1279286b2bb44bd5f776962ed1ed5810adb..48c3f3fb619ca244f4ade9be6595bdd550e6b943 100644 (file)
@@ -8,7 +8,7 @@ void truncate_spaces __ARGS((char_u *line));
 void backspace_until_column __ARGS((int col));
 int vim_is_ctrl_x_key __ARGS((int c));
 int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags));
-int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u *extra, int cdir, int flags));
+int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u *kind, char_u *extra, char_u *info, int cdir, int flags));
 void set_completion __ARGS((int startcol, list_T *list));
 void ins_compl_show_pum __ARGS((void));
 char_u *find_word_start __ARGS((char_u *ptr));