]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-191 v7.0.191
authorBram Moolenaar <Bram@vim.org>
Sun, 4 Feb 2007 01:58:18 +0000 (01:58 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 4 Feb 2007 01:58:18 +0000 (01:58 +0000)
runtime/doc/eval.txt
src/quickfix.c
src/version.c

index 7c928ea84a4b493d32dc1446f15ef9656d77f58d..22421bb5cf8b6c4ec19dc8c52f195ec17ee6e3fd 100644 (file)
@@ -2897,12 +2897,14 @@ getqflist()                                             *getqflist()*
                        vcol    non-zero: "col" is visual column
                                zero: "col" is byte index
                        nr      error number
+                       pattern search pattern used to locate the error
                        text    description of the error
                        type    type of the error, 'E', '1', etc.
                        valid   non-zero: recognized error message
 
                When there is no error list or it's empty an empty list is
-               returned.
+               returned. Quickfix list entries with non-existing buffer
+               number are returned with "bufnr" set to zero.
 
                Useful application: Find pattern matches in multiple files and
                do something with them: >
@@ -4371,7 +4373,10 @@ setqflist({list} [, {action}])                           *setqflist()*
                Non-dictionary items in {list} are ignored.  Each dictionary
                item can contain the following entries:
 
-                   filename    name of a file
+                   bufnr       buffer number; must be the number of a valid
+                               buffer
+                   filename    name of a file; only used when "bufnr" is not
+                               present or it is invalid.
                    lnum        line number in the file
                    pattern     search pattern used to locate the error
                    col         column number
@@ -4384,11 +4389,13 @@ setqflist({list} [, {action}])                          *setqflist()*
                The "col", "vcol", "nr", "type" and "text" entries are
                optional.  Either "lnum" or "pattern" entry can be used to
                locate a matching error line.
-               If the "filename" entry is not present or neither the "lnum"
-               or "pattern" entries are present, then the item will not be
-               handled as an error line.
+               If the "filename" and "bufnr" entries are not present or
+               neither the "lnum" or "pattern" entries are present, then the
+               item will not be handled as an error line.
                If both "pattern" and "lnum" are present then "pattern" will
                be used.
+               Note that the list is not exactly the same as what
+               |getqflist()| returns.
 
                If {action} is set to 'a', then the items from {list} are
                added to the existing quickfix list. If there is no existing
index 6268ec66f3f2d51f7ef16557ff2760e7237d84bc..3b47132392e4c81338e60ce96434199a950e67c4 100644 (file)
@@ -106,7 +106,7 @@ struct efm_S
 
 static int     qf_init_ext __ARGS((qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast));
 static void    qf_new_list __ARGS((qf_info_T *qi));
-static int     qf_add_entry __ARGS((qf_info_T *qi, qfline_T **prevp, char_u *dir, char_u *fname, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid));
+static int     qf_add_entry __ARGS((qf_info_T *qi, qfline_T **prevp, char_u *dir, char_u *fname, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid));
 static void    qf_msg __ARGS((qf_info_T *qi));
 static void    qf_free __ARGS((qf_info_T *qi, int idx));
 static char_u  *qf_types __ARGS((int, int));
@@ -791,6 +791,7 @@ restofline:
                        (*namebuf || directory)
                            ? namebuf
                            : ((currfile && valid) ? currfile : (char_u *)NULL),
+                       0,
                        errmsg,
                        lnum,
                        col,
@@ -936,12 +937,13 @@ qf_free_all(wp)
  * Returns OK or FAIL.
  */
     static int
-qf_add_entry(qi, prevp, dir, fname, mesg, lnum, col, vis_col, pattern, nr, type,
-            valid)
+qf_add_entry(qi, prevp, dir, fname, bufnum, mesg, lnum, col, vis_col, pattern,
+            nr, type, valid)
     qf_info_T  *qi;            /* quickfix list */
     qfline_T   **prevp;        /* pointer to previously added entry or NULL */
     char_u     *dir;           /* optional directory name */
     char_u     *fname;         /* file name or NULL */
+    int                bufnum;         /* buffer number or zero */
     char_u     *mesg;          /* message */
     long       lnum;           /* line number */
     int                col;            /* column */
@@ -955,7 +957,10 @@ qf_add_entry(qi, prevp, dir, fname, mesg, lnum, col, vis_col, pattern, nr, type,
 
     if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
        return FAIL;
-    qfp->qf_fnum = qf_get_fnum(dir, fname);
+    if (bufnum != 0)
+       qfp->qf_fnum = bufnum;
+    else
+       qfp->qf_fnum = qf_get_fnum(dir, fname);
     if ((qfp->qf_text = vim_strsave(mesg)) == NULL)
     {
        vim_free(qfp);
@@ -1106,6 +1111,7 @@ copy_loclist(from, to)
                if (qf_add_entry(to->w_llist, &prevp,
                                 NULL,
                                 NULL,
+                                0,
                                 from_qfp->qf_text,
                                 from_qfp->qf_lnum,
                                 from_qfp->qf_col,
@@ -3134,6 +3140,7 @@ ex_vimgrep(eap)
                    if (qf_add_entry(qi, &prevp,
                                NULL,       /* dir */
                                fnames[fi],
+                               0,
                                ml_get_buf(buf,
                                     regmatch.startpos[0].lnum + lnum, FALSE),
                                regmatch.startpos[0].lnum + lnum,
@@ -3419,6 +3426,7 @@ get_errorlist(wp, list)
     char_u     buf[2];
     qfline_T   *qfp;
     int                i;
+    int                bufnum;
 
     if (wp != NULL)
     {
@@ -3434,6 +3442,11 @@ get_errorlist(wp, list)
     qfp = qi->qf_lists[qi->qf_curlist].qf_start;
     for (i = 1; !got_int && i <= qi->qf_lists[qi->qf_curlist].qf_count; ++i)
     {
+       /* Handle entries with a non-existing buffer number. */
+       bufnum = qfp->qf_fnum;
+       if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+           bufnum = 0;
+
        if ((dict = dict_alloc()) == NULL)
            return FAIL;
        if (list_append_dict(list, dict) == FAIL)
@@ -3441,7 +3454,7 @@ get_errorlist(wp, list)
 
        buf[0] = qfp->qf_type;
        buf[1] = NUL;
-       if ( dict_add_nr_str(dict, "bufnr", (long)qfp->qf_fnum, NULL) == FAIL
+       if ( dict_add_nr_str(dict, "bufnr", (long)bufnum, NULL) == FAIL
          || dict_add_nr_str(dict, "lnum",  (long)qfp->qf_lnum, NULL) == FAIL
          || dict_add_nr_str(dict, "col",   (long)qfp->qf_col, NULL) == FAIL
          || dict_add_nr_str(dict, "vcol",  (long)qfp->qf_viscol, NULL) == FAIL
@@ -3472,6 +3485,7 @@ set_errorlist(wp, list, action)
     listitem_T *li;
     dict_T     *d;
     char_u     *filename, *pattern, *text, *type;
+    int                bufnum;
     long       lnum;
     int                col, nr;
     int                vcol;
@@ -3479,6 +3493,7 @@ set_errorlist(wp, list, action)
     int                valid, status;
     int                retval = OK;
     qf_info_T  *qi = &ql_info;
+    int                did_bufnr_emsg = FALSE;
 
     if (wp != NULL)
     {
@@ -3508,6 +3523,7 @@ set_errorlist(wp, list, action)
            continue;
 
        filename = get_dict_string(d, (char_u *)"filename", TRUE);
+       bufnum = get_dict_number(d, (char_u *)"bufnr");
        lnum = get_dict_number(d, (char_u *)"lnum");
        col = get_dict_number(d, (char_u *)"col");
        vcol = get_dict_number(d, (char_u *)"vcol");
@@ -3519,12 +3535,26 @@ set_errorlist(wp, list, action)
            text = vim_strsave((char_u *)"");
 
        valid = TRUE;
-       if (filename == NULL || (lnum == 0 && pattern == NULL))
+       if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
            valid = FALSE;
 
+       /* Mark entries with non-existing buffer number as not valid. Give the
+        * error message only once. */
+       if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+       {
+           if (!did_bufnr_emsg)
+           {
+               did_bufnr_emsg = TRUE;
+               EMSGN(_("E92: Buffer %ld not found"), bufnum);
+           }
+           valid = FALSE;
+           bufnum = 0;
+       }
+
        status =  qf_add_entry(qi, &prevp,
                               NULL,        /* dir */
                               filename,
+                              bufnum,
                               text,
                               lnum,
                               col,
@@ -3757,6 +3787,7 @@ ex_helpgrep(eap)
                                if (qf_add_entry(qi, &prevp,
                                            NULL,       /* dir */
                                            fnames[fi],
+                                           0,
                                            IObuff,
                                            lnum,
                                            (int)(regmatch.startp[0] - IObuff)
index 9e3cff6385a6d4f483b6dfe2b8526300db4afaee..55fdbac99dff2ba279eacbdcb2895a2553ed18e7 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    191,
 /**/
     190,
 /**/