Permalink
Browse files

patch 8.0.1112: can't get size or current index from quickfix list

Problem:    Can't get size or current index from quickfix list.
Solution:   Add "idx" and "size" options. (Yegappan Lakshmanan)
  • Loading branch information...
brammool committed Sep 15, 2017
1 parent b5e79ef commit fc2b270cfd36230166df486aae4d96d9d1f32755
Showing with 41 additions and 2 deletions.
  1. +4 −0 runtime/doc/eval.txt
  2. +22 −2 src/quickfix.c
  3. +13 −0 src/testdir/test_quickfix.vim
  4. +2 −0 src/version.c
View
@@ -4642,6 +4642,7 @@ getqflist([{what}]) *getqflist()*
id get information for the quickfix list with
|quickfix-ID|; zero means the id for the
current list or the list specifed by "nr"
idx index of the current entry in the list
items quickfix list entries
lines use 'errorformat' to extract items from a list
of lines and return the resulting entries.
@@ -4650,6 +4651,7 @@ getqflist([{what}]) *getqflist()*
nr get information for this quickfix list; zero
means the current quickfix list and "$" means
the last quickfix list
size number of entries in the quickfix list
title get the list title
winid get the |window-ID| (if opened)
all all of the above quickfix properties
@@ -4669,8 +4671,10 @@ getqflist([{what}]) *getqflist()*
The returned dictionary contains the following entries:
context context information stored with |setqflist()|
id quickfix list ID |quickfix-ID|
idx index of the current entry in the list
items quickfix list entries
nr quickfix list number
size number of entries in the quickfix list
title quickfix list title text
winid quickfix |window-ID| (if opened)
View
@@ -2212,8 +2212,7 @@ qf_jump(qf_info_T *qi,
old_qf_ptr = qf_ptr;
qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
old_qf_index = qf_index;
if (dir == FORWARD || dir == FORWARD_FILE ||
dir == BACKWARD || dir == BACKWARD_FILE) /* next/prev valid entry */
if (dir != 0) /* next/prev valid entry */
{
qf_ptr = get_nth_valid_entry(qi, errornr, qf_ptr, &qf_index, dir);
if (qf_ptr == NULL)
@@ -4726,6 +4725,8 @@ enum {
QF_GETLIST_WINID = 0x8,
QF_GETLIST_CONTEXT = 0x10,
QF_GETLIST_ID = 0x20,
QF_GETLIST_IDX = 0x40,
QF_GETLIST_SIZE = 0x80,
QF_GETLIST_ALL = 0xFF
};
@@ -4882,6 +4883,12 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict)
if (dict_find(what, (char_u *)"items", -1) != NULL)
flags |= QF_GETLIST_ITEMS;
if (dict_find(what, (char_u *)"idx", -1) != NULL)
flags |= QF_GETLIST_IDX;
if (dict_find(what, (char_u *)"size", -1) != NULL)
flags |= QF_GETLIST_SIZE;
if (flags & QF_GETLIST_TITLE)
{
char_u *t;
@@ -4934,6 +4941,19 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict)
status = dict_add_nr_str(retdict, "id", qi->qf_lists[qf_idx].qf_id,
NULL);
if ((status == OK) && (flags & QF_GETLIST_IDX))
{
int idx = qi->qf_lists[qf_idx].qf_index;
if (qi->qf_lists[qf_idx].qf_count == 0)
/* For empty lists, qf_index is set to 1 */
idx = 0;
status = dict_add_nr_str(retdict, "idx", idx, NULL);
}
if ((status == OK) && (flags & QF_GETLIST_SIZE))
status = dict_add_nr_str(retdict, "size",
qi->qf_lists[qf_idx].qf_count, NULL);
return status;
}
@@ -430,6 +430,19 @@ func Xtest_browse(cchar)
call delete('Xqftestfile1')
call delete('Xqftestfile2')
" Should be able to use next/prev with invalid entries
Xexpr ""
call assert_equal(0, g:Xgetlist({'idx' : 0}).idx)
call assert_equal(0, g:Xgetlist({'size' : 0}).size)
Xaddexpr ['foo', 'bar', 'baz', 'quux', 'shmoo']
call assert_equal(5, g:Xgetlist({'size' : 0}).size)
Xlast
call assert_equal(5, g:Xgetlist({'idx' : 0}).idx)
Xfirst
call assert_equal(1, g:Xgetlist({'idx' : 0}).idx)
2Xnext
call assert_equal(3, g:Xgetlist({'idx' : 0}).idx)
endfunc
func Test_browse()
View
@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1112,
/**/
1111,
/**/

0 comments on commit fc2b270

Please sign in to comment.