diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-07-08 16:01:08 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-07-08 16:01:08 +0200 |
commit | 4cde86c2ef885e82fff3d925dee9fb5671c025cf (patch) | |
tree | 1b8df3c9c6cf9df080982ce41dc87e69f26971e7 | |
parent | fd35811ca528de7612f9571bce20ef4c392fe5f7 (diff) | |
download | vim-git-4cde86c2ef885e82fff3d925dee9fb5671c025cf.tar.gz |
patch 8.1.0165: :clist output can be very longv8.1.0165
Problem: :clist output can be very long.
Solution: Support filtering :clist entries. (Yegappan Lakshmanan)
-rw-r--r-- | src/quickfix.c | 18 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 17 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 36 insertions, 1 deletions
diff --git a/src/quickfix.c b/src/quickfix.c index ad2529780..ddb9230a6 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -3051,6 +3051,7 @@ qf_list(exarg_T *eap) int qfFileAttr; int qfSepAttr; int qfLineAttr; + int filter_entry; int all = eap->forceit; /* if not :cl!, only show recognised errors */ qf_info_T *qi = &ql_info; @@ -3120,7 +3121,6 @@ qf_list(exarg_T *eap) { if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2) { - msg_putchar('\n'); if (got_int) break; @@ -3141,6 +3141,20 @@ qf_list(exarg_T *eap) vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", i, (char *)fname); } + + // Support for filtering entries using :filter /pat/ clist + filter_entry = 1; + if (qfp->qf_module != NULL && *qfp->qf_module != NUL) + filter_entry &= message_filtered(qfp->qf_module); + if (fname != NULL) + filter_entry &= message_filtered(fname); + if (qfp->qf_pattern != NULL) + filter_entry &= message_filtered(qfp->qf_pattern); + filter_entry &= message_filtered(qfp->qf_text); + if (filter_entry) + goto next_entry; + + msg_putchar('\n'); msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index ? HL_ATTR(HLF_QFL) : qfFileAttr); @@ -3175,6 +3189,7 @@ qf_list(exarg_T *eap) out_flush(); /* show one line at a time */ } +next_entry: qfp = qfp->qf_next; if (qfp == NULL) break; @@ -4186,6 +4201,7 @@ ex_make(exarg_T *eap) } if (res >= 0) qf_list_changed(qi, qi->qf_curlist); + // Remember the current quickfix list identifier, so that we can // check for autocommands changing the current quickfix list. save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index a4006b07d..c8f0984b0 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -3487,3 +3487,20 @@ func Test_autocmd_changelist() call Xautocmd_changelist('c') call Xautocmd_changelist('l') endfunc + +" Tests for the ':filter /pat/ clist' command +func Test_filter_clist() + cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15'] + call assert_equal([' 2 Xfile2:15 col 15: Line 15'], + \ split(execute('filter /Line 15/ clist'), "\n")) + call assert_equal([' 1 Xfile1:10 col 10: Line 10'], + \ split(execute('filter /Xfile1/ clist'), "\n")) + call assert_equal([], split(execute('filter /abc/ clist'), "\n")) + + call setqflist([{'module' : 'abc', 'pattern' : 'pat1'}, + \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ') + call assert_equal([' 2 pqr:pat2: '], + \ split(execute('filter /pqr/ clist'), "\n")) + call assert_equal([' 1 abc:pat1: '], + \ split(execute('filter /pat1/ clist'), "\n")) +endfunc diff --git a/src/version.c b/src/version.c index 4338a64d6..24de53fdc 100644 --- a/src/version.c +++ b/src/version.c @@ -790,6 +790,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 165, +/**/ 164, /**/ 163, |