Mercurial > vim
changeset 9608:fa64afb99dda v7.4.2081
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jul 20 21:44:37 2016 +0200
patch 7.4.2081
Problem: Line numbers in the error list are not always adjusted.
Solution: Set b_has_qf_entry properly. (Yegappan Lakshmanan)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 20 Jul 2016 21:45:05 +0200 |
parents | 8fb453704fe8 |
children | 17ae75ac3287 |
files | src/quickfix.c src/structs.h src/testdir/test_quickfix.vim src/version.c |
diffstat | 4 files changed, 22 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/quickfix.c +++ b/src/quickfix.c @@ -1408,7 +1408,8 @@ qf_add_entry( qfp->qf_fnum = bufnum; if (buf != NULL) - buf->b_has_qf_entry = TRUE; + buf->b_has_qf_entry |= + (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY; } else qfp->qf_fnum = qf_get_fnum(qi, dir, fname); @@ -1680,7 +1681,8 @@ qf_get_fnum(qf_info_T *qi, char_u *direc if (buf == NULL) return 0; - buf->b_has_qf_entry = TRUE; + buf->b_has_qf_entry = + (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY; return buf->b_fnum; } @@ -2728,8 +2730,9 @@ qf_mark_adjust( int idx; qf_info_T *qi = &ql_info; int found_one = FALSE; - - if (!curbuf->b_has_qf_entry) + int buf_has_flag = wp == NULL ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY; + + if (!(curbuf->b_has_qf_entry & buf_has_flag)) return; if (wp != NULL) { @@ -2758,7 +2761,7 @@ qf_mark_adjust( } if (!found_one) - curbuf->b_has_qf_entry = FALSE; + curbuf->b_has_qf_entry &= ~buf_has_flag; } /*
--- a/src/structs.h +++ b/src/structs.h @@ -1906,6 +1906,8 @@ struct file_buffer #ifdef FEAT_QUICKFIX char_u *b_p_bh; /* 'bufhidden' */ char_u *b_p_bt; /* 'buftype' */ +#define BUF_HAS_QF_ENTRY 1 +#define BUF_HAS_LL_ENTRY 2 int b_has_qf_entry; #endif int b_p_bl; /* 'buflisted' */
--- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -1341,13 +1341,14 @@ function! Xadjust_qflnum(cchar) enew | only - call s:create_test_file('Xqftestfile') - edit Xqftestfile + let fname = 'Xqftestfile' . a:cchar + call s:create_test_file(fname) + exe 'edit ' . fname - Xgetexpr ['Xqftestfile:5:Line5', - \ 'Xqftestfile:10:Line10', - \ 'Xqftestfile:15:Line15', - \ 'Xqftestfile:20:Line20'] + Xgetexpr [fname . ':5:Line5', + \ fname . ':10:Line10', + \ fname . ':15:Line15', + \ fname . ':20:Line20'] 6,14delete call append(6, ['Buffer', 'Window']) @@ -1359,11 +1360,13 @@ function! Xadjust_qflnum(cchar) call assert_equal(13, l[3].lnum) enew! - call delete('Xqftestfile') + call delete(fname) endfunction function! Test_adjust_lnum() + call setloclist(0, []) call Xadjust_qflnum('c') + call setqflist([]) call Xadjust_qflnum('l') endfunction