0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

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)
This commit is contained in:
Bram Moolenaar
2017-09-15 22:43:07 +02:00
parent b5e79ef5a9
commit fc2b270cfd
4 changed files with 41 additions and 2 deletions

View File

@@ -4642,6 +4642,7 @@ getqflist([{what}]) *getqflist()*
id get information for the quickfix list with id get information for the quickfix list with
|quickfix-ID|; zero means the id for the |quickfix-ID|; zero means the id for the
current list or the list specifed by "nr" current list or the list specifed by "nr"
idx index of the current entry in the list
items quickfix list entries items quickfix list entries
lines use 'errorformat' to extract items from a list lines use 'errorformat' to extract items from a list
of lines and return the resulting entries. of lines and return the resulting entries.
@@ -4650,6 +4651,7 @@ getqflist([{what}]) *getqflist()*
nr get information for this quickfix list; zero nr get information for this quickfix list; zero
means the current quickfix list and "$" means means the current quickfix list and "$" means
the last quickfix list the last quickfix list
size number of entries in the quickfix list
title get the list title title get the list title
winid get the |window-ID| (if opened) winid get the |window-ID| (if opened)
all all of the above quickfix properties all all of the above quickfix properties
@@ -4669,8 +4671,10 @@ getqflist([{what}]) *getqflist()*
The returned dictionary contains the following entries: The returned dictionary contains the following entries:
context context information stored with |setqflist()| context context information stored with |setqflist()|
id quickfix list ID |quickfix-ID| id quickfix list ID |quickfix-ID|
idx index of the current entry in the list
items quickfix list entries items quickfix list entries
nr quickfix list number nr quickfix list number
size number of entries in the quickfix list
title quickfix list title text title quickfix list title text
winid quickfix |window-ID| (if opened) winid quickfix |window-ID| (if opened)

View File

@@ -2212,8 +2212,7 @@ qf_jump(qf_info_T *qi,
old_qf_ptr = qf_ptr; old_qf_ptr = qf_ptr;
qf_index = qi->qf_lists[qi->qf_curlist].qf_index; qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
old_qf_index = qf_index; old_qf_index = qf_index;
if (dir == FORWARD || dir == FORWARD_FILE || if (dir != 0) /* next/prev valid entry */
dir == BACKWARD || dir == BACKWARD_FILE) /* next/prev valid entry */
{ {
qf_ptr = get_nth_valid_entry(qi, errornr, qf_ptr, &qf_index, dir); qf_ptr = get_nth_valid_entry(qi, errornr, qf_ptr, &qf_index, dir);
if (qf_ptr == NULL) if (qf_ptr == NULL)
@@ -4726,6 +4725,8 @@ enum {
QF_GETLIST_WINID = 0x8, QF_GETLIST_WINID = 0x8,
QF_GETLIST_CONTEXT = 0x10, QF_GETLIST_CONTEXT = 0x10,
QF_GETLIST_ID = 0x20, QF_GETLIST_ID = 0x20,
QF_GETLIST_IDX = 0x40,
QF_GETLIST_SIZE = 0x80,
QF_GETLIST_ALL = 0xFF 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) if (dict_find(what, (char_u *)"items", -1) != NULL)
flags |= QF_GETLIST_ITEMS; 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) if (flags & QF_GETLIST_TITLE)
{ {
char_u *t; 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, status = dict_add_nr_str(retdict, "id", qi->qf_lists[qf_idx].qf_id,
NULL); 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; return status;
} }

View File

@@ -430,6 +430,19 @@ func Xtest_browse(cchar)
call delete('Xqftestfile1') call delete('Xqftestfile1')
call delete('Xqftestfile2') 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 endfunc
func Test_browse() func Test_browse()

View File

@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1112,
/**/ /**/
1111, 1111,
/**/ /**/