Mercurial > vim
diff src/quickfix.c @ 14664:8770189c3e22 v8.1.0345
patch 8.1.0345: cannot get the window id associated with the location list
commit https://github.com/vim/vim/commit/c9cc9c78f21caba7ecb5c90403df5e19a57aa96a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Sep 2 15:18:42 2018 +0200
patch 8.1.0345: cannot get the window id associated with the location list
Problem: Cannot get the window id associated with the location list.
Solution: Add the "filewinid" argument to getloclist(). (Yegappan
Lakshmanan, closes #3202)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 02 Sep 2018 15:30:08 +0200 |
parents | 462087b5c415 |
children | 3ca7aba1116e |
line wrap: on
line diff
--- a/src/quickfix.c +++ b/src/quickfix.c @@ -5670,7 +5670,8 @@ enum { QF_GETLIST_IDX = 0x40, QF_GETLIST_SIZE = 0x80, QF_GETLIST_TICK = 0x100, - QF_GETLIST_ALL = 0x1FF, + QF_GETLIST_FILEWINID = 0x200, + QF_GETLIST_ALL = 0x3FF, }; /* @@ -5744,12 +5745,17 @@ qf_winid(qf_info_T *qi) * Convert the keys in 'what' to quickfix list property flags. */ static int -qf_getprop_keys2flags(dict_T *what) +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,6 +5784,9 @@ qf_getprop_keys2flags(dict_T *what) 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,6 +5879,8 @@ qf_getprop_defaults(qf_info_T *qi, int f 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,6 +5895,26 @@ qf_getprop_title(qf_info_T *qi, int qf_i } /* + * 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,7 +5994,7 @@ qf_get_properties(win_T *wp, dict_T *wha if (wp != NULL) qi = GET_LOC_LIST(wp); - flags = qf_getprop_keys2flags(what); + flags = qf_getprop_keys2flags(what, (wp != NULL)); if (qi != NULL && qi->qf_listcount != 0) qf_idx = qf_getprop_qfidx(qi, what); @@ -5992,6 +6023,8 @@ qf_get_properties(win_T *wp, dict_T *wha 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; }