patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Problem: MS-Windows: adding a long quickfix list is slow.
Solution: Shorten the buffer name only for the first entry. (Yegappan
Lakshmanan, closes #7039, closes #7033)
diff --git a/src/quickfix.c b/src/quickfix.c
index 43d2d3f..d50cd16 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -4496,6 +4496,7 @@
linenr_T lnum,
qfline_T *qfp,
char_u *dirname,
+ int first_bufline,
char_u *qftf_str)
{
int len;
@@ -4520,9 +4521,11 @@
vim_strncpy(IObuff, gettail(errbuf->b_fname), IOSIZE - 1);
else
{
- // shorten the file name if not done already
- if (errbuf->b_sfname == NULL
- || mch_isFullName(errbuf->b_sfname))
+ // Shorten the file name if not done already.
+ // For optimization, do this only for the first entry in a
+ // buffer.
+ if (first_bufline && (errbuf->b_sfname == NULL
+ || mch_isFullName(errbuf->b_sfname)))
{
if (*dirname == NUL)
mch_dirname(dirname, MAXPATHL);
@@ -4663,6 +4666,7 @@
{
char_u dirname[MAXPATHL];
int invalid_val = FALSE;
+ int prev_bufnr = -1;
*dirname = NUL;
@@ -4697,9 +4701,11 @@
invalid_val = TRUE;
}
- if (qf_buf_add_line(buf, lnum, qfp, dirname, qftf_str) == FAIL)
+ if (qf_buf_add_line(buf, lnum, qfp, dirname,
+ prev_bufnr != qfp->qf_fnum, qftf_str) == FAIL)
break;
+ prev_bufnr = qfp->qf_fnum;
++lnum;
qfp = qfp->qf_next;
if (qfp == NULL)