Loading ...
Sorry, an error occurred while loading the content.

patch 7.0.191

Expand Messages
  • Bram Moolenaar
    Patch 7.0.191 Problem: The items used by getqflist() and setqflist() don t match. Solution: Support the bufnum item for setqflist(). (Yegappan
    Message 1 of 1 , Feb 4, 2007
    • 0 Attachment
      Patch 7.0.191
      Problem: The items used by getqflist() and setqflist() don't match.
      Solution: Support the "bufnum" item for setqflist(). (Yegappan Lakshmanan)
      Files: runtime/doc/eval.txt, src/quickfix.c


      *** ../vim-7.0.190/runtime/doc/eval.txt Wed Nov 1 15:31:02 2006
      --- runtime/doc/eval.txt Sun Feb 4 01:54:35 2007
      ***************
      *** 2897,2908 ****
      vcol non-zero: "col" is visual column
      zero: "col" is byte index
      nr error number
      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.

      Useful application: Find pattern matches in multiple files and
      do something with them: >
      --- 2912,2925 ----
      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. 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,4377 ****
      Non-dictionary items in {list} are ignored. Each dictionary
      item can contain the following entries:

      ! filename name of a file
      lnum line number in the file
      pattern search pattern used to locate the error
      col column number
      --- 4401,4410 ----
      Non-dictionary items in {list} are ignored. Each dictionary
      item can contain the following entries:

      ! 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,4394 ****
      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 both "pattern" and "lnum" are present then "pattern" will
      be used.

      If {action} is set to 'a', then the items from {list} are
      added to the existing quickfix list. If there is no existing
      --- 4417,4429 ----
      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" 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
      *** ../vim-7.0.190/src/quickfix.c Fri Oct 20 20:15:05 2006
      --- src/quickfix.c Sun Feb 4 01:50:17 2007
      ***************
      *** 106,112 ****

      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 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));
      --- 106,112 ----

      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, 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,796 ****
      --- 791,797 ----
      (*namebuf || directory)
      ? namebuf
      : ((currfile && valid) ? currfile : (char_u *)NULL),
      + 0,
      errmsg,
      lnum,
      col,
      ***************
      *** 936,947 ****
      * Returns OK or FAIL.
      */
      static int
      ! qf_add_entry(qi, prevp, dir, fname, 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 */
      char_u *mesg; /* message */
      long lnum; /* line number */
      int col; /* column */
      --- 937,949 ----
      * Returns OK or FAIL.
      */
      static int
      ! 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,961 ****

      if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
      return FAIL;
      ! qfp->qf_fnum = qf_get_fnum(dir, fname);
      if ((qfp->qf_text = vim_strsave(mesg)) == NULL)
      {
      vim_free(qfp);
      --- 957,966 ----

      if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
      return FAIL;
      ! 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,1111 ****
      --- 1111,1117 ----
      if (qf_add_entry(to->w_llist, &prevp,
      NULL,
      NULL,
      + 0,
      from_qfp->qf_text,
      from_qfp->qf_lnum,
      from_qfp->qf_col,
      ***************
      *** 3134,3139 ****
      --- 3140,3146 ----
      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,3424 ****
      --- 3426,3432 ----
      char_u buf[2];
      qfline_T *qfp;
      int i;
      + int bufnum;

      if (wp != NULL)
      {
      ***************
      *** 3434,3439 ****
      --- 3442,3452 ----
      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,3447 ****

      buf[0] = qfp->qf_type;
      buf[1] = NUL;
      ! if ( dict_add_nr_str(dict, "bufnr", (long)qfp->qf_fnum, 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
      --- 3454,3460 ----

      buf[0] = qfp->qf_type;
      buf[1] = NUL;
      ! 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,3477 ****
      --- 3485,3491 ----
      listitem_T *li;
      dict_T *d;
      char_u *filename, *pattern, *text, *type;
      + int bufnum;
      long lnum;
      int col, nr;
      int vcol;
      ***************
      *** 3479,3484 ****
      --- 3493,3499 ----
      int valid, status;
      int retval = OK;
      qf_info_T *qi = &ql_info;
      + int did_bufnr_emsg = FALSE;

      if (wp != NULL)
      {
      ***************
      *** 3508,3513 ****
      --- 3523,3529 ----
      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,3530 ****
      text = vim_strsave((char_u *)"");

      valid = TRUE;
      ! if (filename == NULL || (lnum == 0 && pattern == NULL))
      valid = FALSE;

      status = qf_add_entry(qi, &prevp,
      NULL, /* dir */
      filename,
      text,
      lnum,
      col,
      --- 3535,3560 ----
      text = vim_strsave((char_u *)"");

      valid = TRUE;
      ! 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,3762 ****
      --- 3787,3793 ----
      if (qf_add_entry(qi, &prevp,
      NULL, /* dir */
      fnames[fi],
      + 0,
      IObuff,
      lnum,
      (int)(regmatch.startp[0] - IObuff)
      *** ../vim-7.0.190/src/version.c Sun Feb 4 02:49:03 2007
      --- src/version.c Sun Feb 4 02:50:49 2007
      ***************
      *** 668,669 ****
      --- 668,671 ----
      { /* Add new patch number below this line */
      + /**/
      + 191,
      /**/

      --
      From "know your smileys":
      |-P Reaction to unusually ugly C code

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ download, build and distribute -- http://www.A-A-P.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
    Your message has been successfully submitted and would be delivered to recipients shortly.