Patch 7.4.1884
Problem: Updating marks in a quickfix list is very slow when the list is
long.
Solution: Only update marks if the buffer has a quickfix entry.
Files: src/structs.h, src/quickfix.c
*** ../vim-7.4.1883/src/structs.h 2016-05-29 16:44:22.157304121 +0200
--- src/structs.h 2016-06-03 18:32:27.931272399 +0200
***************
*** 1865,1873 ****
#ifdef FEAT_MBYTE
int b_p_bomb; /* 'bomb' */
#endif
! #if defined(FEAT_QUICKFIX)
char_u *b_p_bh; /* 'bufhidden' */
char_u *b_p_bt; /* 'buftype' */
#endif
int b_p_bl; /* 'buflisted' */
#ifdef FEAT_CINDENT
--- 1865,1874 ----
#ifdef FEAT_MBYTE
int b_p_bomb; /* 'bomb' */
#endif
! #ifdef FEAT_QUICKFIX
char_u *b_p_bh; /* 'bufhidden' */
char_u *b_p_bt; /* 'buftype' */
+ int b_has_qf_entry;
#endif
int b_p_bl; /* 'buflisted' */
#ifdef FEAT_CINDENT
***************
*** 2465,2471 ****
int w_wrow, w_wcol; /* cursor position in window */
linenr_T w_botline; /* number of the line below the bottom of
! the screen */
int w_empty_rows; /* number of ~ rows in window */
#ifdef FEAT_DIFF
int w_filler_rows; /* number of filler rows at the end
of the
--- 2466,2472 ----
int w_wrow, w_wcol; /* cursor position in window */
linenr_T w_botline; /* number of the line below the bottom of
! the window */
int w_empty_rows; /* number of ~ rows in window */
#ifdef FEAT_DIFF
int w_filler_rows; /* number of filler rows at the end
of the
*** ../vim-7.4.1883/src/quickfix.c 2016-06-02 22:18:44.040274149 +0200
--- src/quickfix.c 2016-06-03 19:02:40.395247467 +0200
***************
*** 1178,1184 ****
--- 1178,1190 ----
if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
return FAIL;
if (bufnum != 0)
+ {
+ buf_T *buf = buflist_findnr(bufnum);
+
qfp->qf_fnum = bufnum;
+ if (buf != NULL)
+ buf->b_has_qf_entry = TRUE;
+ }
else
qfp->qf_fnum = qf_get_fnum(dir, fname);
if ((qfp->qf_text = vim_strsave(mesg)) == NULL)
***************
*** 1378,1427 ****
}
/*
! * get buffer number for file "dir.name"
*/
static int
qf_get_fnum(char_u *directory, char_u *fname)
{
if (fname == NULL || *fname == NUL) /* no file name */
return 0;
- {
- char_u *ptr;
- int fnum;
#ifdef VMS
! vms_remove_version(fname);
#endif
#ifdef BACKSLASH_IN_FILENAME
! if (directory != NULL)
! slash_adjust(directory);
! slash_adjust(fname);
#endif
! if (directory != NULL && !vim_isAbsName(fname)
! && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
{
- /*
- * Here we check if the file really exists.
- * This should normally be true, but if make works without
- * "leaving directory"-messages we might have missed a
- * directory change.
- */
- if (mch_getperm(ptr) < 0)
- {
- vim_free(ptr);
- directory = qf_guess_filepath(fname);
- if (directory)
- ptr = concat_fnames(directory, fname, TRUE);
- else
- ptr = vim_strsave(fname);
- }
- /* Use concatenated directory name and file name */
- fnum = buflist_add(ptr, 0);
vim_free(ptr);
! return fnum;
}
! return buflist_add(fname, 0);
}
}
/*
--- 1384,1437 ----
}
/*
! * Get buffer number for file "dir.name".
! * Also sets the b_has_qf_entry flag.
*/
static int
qf_get_fnum(char_u *directory, char_u *fname)
{
+ char_u *ptr;
+ buf_T *buf;
+
if (fname == NULL || *fname == NUL) /* no file name */
return 0;
#ifdef VMS
! vms_remove_version(fname);
#endif
#ifdef BACKSLASH_IN_FILENAME
! if (directory != NULL)
! slash_adjust(directory);
! slash_adjust(fname);
#endif
! if (directory != NULL && !vim_isAbsName(fname)
! && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
! {
! /*
! * Here we check if the file really exists.
! * This should normally be true, but if make works without
! * "leaving directory"-messages we might have missed a
! * directory change.
! */
! if (mch_getperm(ptr) < 0)
{
vim_free(ptr);
! directory = qf_guess_filepath(fname);
! if (directory)
! ptr = concat_fnames(directory, fname, TRUE);
! else
! ptr = vim_strsave(fname);
}
! /* Use concatenated directory name and file name */
! buf = buflist_new(ptr, NULL, (linenr_T)0, 0);
! vim_free(ptr);
}
+ else
+ buf = buflist_new(fname, NULL, (linenr_T)0, 0);
+ if (buf == NULL)
+ return 0;
+ buf->b_has_qf_entry = TRUE;
+ return buf->b_fnum;
}
/*
***************
*** 2414,2420 ****
--- 2424,2433 ----
qfline_T *qfp;
int idx;
qf_info_T *qi = &ql_info;
+ int found_one = FALSE;
+ if (!curbuf->b_has_qf_entry)
+ return;
if (wp != NULL)
{
if (wp->w_llist == NULL)
***************
*** 2429,2434 ****
--- 2442,2448 ----
++i, qfp = qfp->qf_next)
if (qfp->qf_fnum == curbuf->b_fnum)
{
+ found_one = TRUE;
if (qfp->qf_lnum >= line1 && qfp->qf_lnum <= line2)
{
if (amount == MAXLNUM)
***************
*** 2439,2444 ****
--- 2453,2461 ----
else if (amount_after && qfp->qf_lnum > line2)
qfp->qf_lnum += amount_after;
}
+
+ if (!found_one)
+ curbuf->b_has_qf_entry = FALSE;
}
/*
*** ../vim-7.4.1883/src/version.c 2016-06-02 22:27:04.260267269 +0200
--- src/version.c 2016-06-03 18:33:12.467271786 +0200
***************
*** 755,756 ****
--- 755,758 ----
{ /* Add new patch number below this line */
+ /**/
+ 1884,
/**/
--
The 50-50-90 rule: Anytime you have a 50-50 chance of getting
something right, there's a 90% probability you'll get it wrong.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.