Patch 8.1.0345
Problem: Cannot get the window id associated with the location list.
Solution: Add the "filewinid" argument to getloclist(). (Yegappan
Lakshmanan, closes #3202)
Files: runtime/doc/eval.txt, src/quickfix.c,
src/testdir/test_quickfix.vim
*** ../vim-8.1.0344/runtime/doc/eval.txt 2018-08-21 21:09:02.598739663
+0200
--- runtime/doc/eval.txt 2018-09-02 15:13:00.638419373 +0200
***************
*** 4721,4726 ****
--- 4729,4738 ----
If the optional {what} dictionary argument is supplied, then
returns the items listed in {what} as a dictionary. Refer to
|getqflist()| for the supported items in {what}.
+ If {what} contains 'filewinid', then returns the id of the
+ window used to display files from the location list. This
+ field is applicable only when called from a location list
+ window.
getmatches() *getmatches()*
Returns a |List| with all matches previously defined by
*** ../vim-8.1.0344/src/quickfix.c 2018-08-28 22:07:38.574120540 +0200
--- src/quickfix.c 2018-09-02 15:13:00.638419373 +0200
***************
*** 5670,5676 ****
QF_GETLIST_IDX = 0x40,
QF_GETLIST_SIZE = 0x80,
QF_GETLIST_TICK = 0x100,
! QF_GETLIST_ALL = 0x1FF,
};
/*
--- 5670,5677 ----
QF_GETLIST_IDX = 0x40,
QF_GETLIST_SIZE = 0x80,
QF_GETLIST_TICK = 0x100,
! QF_GETLIST_FILEWINID = 0x200,
! QF_GETLIST_ALL = 0x3FF,
};
/*
***************
*** 5744,5755 ****
* Convert the keys in 'what' to quickfix list property flags.
*/
static int
! qf_getprop_keys2flags(dict_T *what)
{
int flags = QF_GETLIST_NONE;
if (dict_find(what, (char_u *)"all", -1) != NULL)
flags |= QF_GETLIST_ALL;
if (dict_find(what, (char_u *)"title", -1) != NULL)
flags |= QF_GETLIST_TITLE;
--- 5745,5761 ----
* Convert the keys in 'what' to quickfix list property flags.
*/
static int
! qf_getprop_keys2flags(dict_T *what, int loclist)
{
int flags = QF_GETLIST_NONE;
if (dict_find(what, (char_u *)"all", -1) != NULL)
+ {
flags |= QF_GETLIST_ALL;
+ if (!loclist)
+ // File window ID is applicable only to location list windows
+ flags &= ~ QF_GETLIST_FILEWINID;
+ }
if (dict_find(what, (char_u *)"title", -1) != NULL)
flags |= QF_GETLIST_TITLE;
***************
*** 5778,5783 ****
--- 5784,5792 ----
if (dict_find(what, (char_u *)"changedtick", -1) != NULL)
flags |= QF_GETLIST_TICK;
+ if (loclist && dict_find(what, (char_u *)"filewinid", -1) != NULL)
+ flags |= QF_GETLIST_FILEWINID;
+
return flags;
}
***************
*** 5870,5875 ****
--- 5879,5886 ----
status = dict_add_number(retdict, "size", 0);
if ((status == OK) && (flags & QF_GETLIST_TICK))
status = dict_add_number(retdict, "changedtick", 0);
+ if ((status == OK) && (qi != &ql_info) && (flags & QF_GETLIST_FILEWINID))
+ status = dict_add_number(retdict, "filewinid", 0);
return status;
}
***************
*** 5884,5889 ****
--- 5895,5920 ----
}
/*
+ * Returns the identifier of the window used to display files from a location
+ * list. If there is no associated window, then returns 0. Useful only when
+ * called from a location list window.
+ */
+ static int
+ qf_getprop_filewinid(win_T *wp, qf_info_T *qi, dict_T *retdict)
+ {
+ int winid = 0;
+
+ if (wp != NULL && IS_LL_WINDOW(wp))
+ {
+ win_T *ll_wp = qf_find_win_with_loclist(qi);
+ if (ll_wp != NULL)
+ winid = ll_wp->w_id;
+ }
+
+ return dict_add_number(retdict, "filewinid", winid);
+ }
+
+ /*
* Return the quickfix list items/entries as 'items' in retdict
*/
static int
***************
*** 5963,5969 ****
if (wp != NULL)
qi = GET_LOC_LIST(wp);
! flags = qf_getprop_keys2flags(what);
if (qi != NULL && qi->qf_listcount != 0)
qf_idx = qf_getprop_qfidx(qi, what);
--- 5994,6000 ----
if (wp != NULL)
qi = GET_LOC_LIST(wp);
! flags = qf_getprop_keys2flags(what, (wp != NULL));
if (qi != NULL && qi->qf_listcount != 0)
qf_idx = qf_getprop_qfidx(qi, what);
***************
*** 5992,5997 ****
--- 6023,6030 ----
if ((status == OK) && (flags & QF_GETLIST_TICK))
status = dict_add_number(retdict, "changedtick",
qi->qf_lists[qf_idx].qf_changedtick);
+ if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID))
+ status = qf_getprop_filewinid(wp, qi, retdict);
return status;
}
*** ../vim-8.1.0344/src/testdir/test_quickfix.vim 2018-08-30
15:58:23.244944556 +0200
--- src/testdir/test_quickfix.vim 2018-09-02 15:13:00.638419373 +0200
***************
*** 1973,1978 ****
--- 1973,1990 ----
call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10,
'text' : 'L10'}]})
call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title)
+ " Test for getting id of window associated with a location list window
+ if a:cchar == 'l'
+ only
+ call assert_equal(0, g:Xgetlist({'all' : 1}).filewinid)
+ let wid = win_getid()
+ Xopen
+ call assert_equal(wid, g:Xgetlist({'filewinid' : 1}).filewinid)
+ wincmd w
+ call assert_equal(0, g:Xgetlist({'filewinid' : 1}).filewinid)
+ only
+ endif
+
" The following used to crash Vim with address sanitizer
call g:Xsetlist([], 'f')
call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]})
***************
*** 3000,3006 ****
call assert_equal('', g:Xgetlist({'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick)
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr'
: 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick': 0},
g:Xgetlist({'all' : 0}))
" Quickfix window with empty stack
silent! Xopen
--- 3012,3028 ----
call assert_equal('', g:Xgetlist({'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick)
! if a:cchar == 'c'
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0,
! \ 'items' : [], 'nr' : 0, 'size' : 0,
! \ 'title' : '', 'winid' : 0, 'changedtick': 0},
! \ g:Xgetlist({'all' : 0}))
! else
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0,
! \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '',
! \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0},
! \ g:Xgetlist({'all' : 0}))
! endif
" Quickfix window with empty stack
silent! Xopen
***************
*** 3033,3039 ****
call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' :
0}).changedtick)
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr'
: 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0},
g:Xgetlist({'id' : qfid, 'all' : 0}))
" Non-existing quickfix list number
call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context)
--- 3055,3070 ----
call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' :
0}).changedtick)
! if a:cchar == 'c'
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
! \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0}))
! else
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
! \ 'changedtick' : 0, 'filewinid' : 0},
! \ g:Xgetlist({'id' : qfid, 'all' : 0}))
! endif
" Non-existing quickfix list number
call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context)
***************
*** 3045,3051 ****
call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick)
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr'
: 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0},
g:Xgetlist({'nr' : 5, 'all' : 0}))
endfunc
func Test_getqflist()
--- 3076,3091 ----
call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title)
call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid)
call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick)
! if a:cchar == 'c'
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
! \ 'changedtick' : 0}, g:Xgetlist({'nr' : 5, 'all' : 0}))
! else
! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
! \ 'changedtick' : 0, 'filewinid' : 0},
! \ g:Xgetlist({'nr' : 5, 'all' : 0}))
! endif
endfunc
func Test_getqflist()
*** ../vim-8.1.0344/src/version.c 2018-09-02 15:07:21.977655529 +0200
--- src/version.c 2018-09-02 15:14:57.573305935 +0200
***************
*** 796,797 ****
--- 796,799 ----
{ /* Add new patch number below this line */
+ /**/
+ 345,
/**/
--
The Feynman problem solving Algorithm:
1) Write down the problem
2) Think real hard
3) Write down the answer
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.