aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-09-30 20:58:36 -0400
committerGitHub <noreply@github.com>2020-09-30 20:58:36 -0400
commit3430e40c609ff29e7fce52f017361583c380f46b (patch)
treee070e577f9f9097d7c1bb2dddbbfcd006f07adb2 /src
parentc007b961f53e0a38fdec23bac4777493dceeab12 (diff)
downloadrneovim-3430e40c609ff29e7fce52f017361583c380f46b.tar.gz
rneovim-3430e40c609ff29e7fce52f017361583c380f46b.tar.bz2
rneovim-3430e40c609ff29e7fce52f017361583c380f46b.zip
vim-patch:8.2.1775: MS-Windows: adding a long quickfix list is slow (#13019)
vim-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 vim/vim#7039, closes vim/vim#7033) https://github.com/vim/vim/commit/8ec92c977976d9e9225183e36a80e6b0cdbf1f51 N/A patches for version.c: vim-patch:8.1.2226: cannot use system copy/paste in non-xterm terminals Problem: Cannot use system copy/paste in non-xterm terminals. Solution: Instead of setting 'mouse' to "a" set it to "nvi" in defaults.vim. https://github.com/vim/vim/commit/5b418992cf254137fde2a14d7066fbea5afddb28 vim-patch:8.2.1772: cannot use CTRL-W <Down> to move out of a terminal window Problem: Cannot use CTRL-W <Down> to move out of a terminal window. Solution: Use special_to_buf() instead of mb_char2bytes(). (closes vim/vim#7045) https://github.com/vim/vim/commit/f43e7ac4eee22dbb26fc069ec9a3d1598ec8dfe9 vim-patch:8.2.1774: GTK: hang when forced to exit Problem: GTK: hang when forced to exit. Solution: Do not clean up "mainwin" when really_exiting is set. (Zdenek Dohnal, closes vim/vim#7042) https://github.com/vim/vim/commit/32fbc4f247a31e35ade0939542e11aa033a2554f vim-patch:8.2.1776: filetype.vim may be loaded twice Problem: Filetype.vim may be loaded twice. Solution: Do "syntax on" after "filetype on". (Adam Stankiewicz, closes vim/vim#7049) https://github.com/vim/vim/commit/17bb4d4607a95e13e913519af106f1bf8b26c178
Diffstat (limited to 'src')
-rw-r--r--src/nvim/quickfix.c16
-rw-r--r--src/nvim/testdir/test_quickfix.vim12
2 files changed, 23 insertions, 5 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 5754950745..0c9902aaec 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -3752,7 +3752,7 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last)
// Add an error line to the quickfix buffer.
static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp,
- char_u *dirname)
+ char_u *dirname, bool first_bufline)
FUNC_ATTR_NONNULL_ALL
{
int len;
@@ -3767,9 +3767,12 @@ static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp,
if (qfp->qf_type == 1) { // :helpgrep
STRLCPY(IObuff, path_tail(errbuf->b_fname), IOSIZE - 1);
} else {
- // shorten the file name if not done already
- if (errbuf->b_sfname == NULL
- || path_is_absolute(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
+ || path_is_absolute(errbuf->b_sfname))) {
if (*dirname == NUL) {
os_dirname(dirname, MAXPATHL);
}
@@ -3847,6 +3850,7 @@ static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last)
// Check if there is anything to display
if (qfl != NULL) {
char_u dirname[MAXPATHL];
+ int prev_bufnr = -1;
*dirname = NUL;
@@ -3859,9 +3863,11 @@ static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last)
lnum = buf->b_ml.ml_line_count;
}
while (lnum < qfl->qf_count) {
- if (qf_buf_add_line(buf, lnum, qfp, dirname) == FAIL) {
+ if (qf_buf_add_line(buf, lnum, qfp, dirname,
+ prev_bufnr != qfp->qf_fnum) == FAIL) {
break;
}
+ prev_bufnr = qfp->qf_fnum;
lnum++;
qfp = qfp->qf_next;
if (qfp == NULL) {
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
index eeec5bd2c3..fab5cb320f 100644
--- a/src/nvim/testdir/test_quickfix.vim
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -3473,6 +3473,18 @@ func Test_shorten_fname()
" Displaying the quickfix list should simplify the file path
silent! clist
call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim'))
+ " Add a few entries for the same file with different paths and check whether
+ " the buffer name is shortened
+ %bwipe
+ call setqflist([], 'f')
+ call setqflist([{'filename' : 'test_quickfix.vim', 'lnum' : 10},
+ \ {'filename' : '../testdir/test_quickfix.vim', 'lnum' : 20},
+ \ {'filename' : fname, 'lnum' : 30}], ' ')
+ copen
+ call assert_equal(['test_quickfix.vim|10| ',
+ \ 'test_quickfix.vim|20| ',
+ \ 'test_quickfix.vim|30| '], getline(1, '$'))
+ cclose
endfunc
" Quickfix title tests