# HG changeset patch # User Christian Brabandt # Date 1469043905 -7200 # Node ID fa64afb99ddabf4866c11a7e294b6bea62f7125d # Parent 8fb453704fe82edb211ed5fd90f130a7e1990b6b commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504 Author: Bram Moolenaar 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) diff --git a/src/quickfix.c b/src/quickfix.c --- 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; } /* diff --git a/src/structs.h b/src/structs.h --- 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' */ diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim --- 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2081, +/**/ 2080, /**/ 2079,