diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-01-27 11:52:13 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-01-27 11:52:13 +0100 |
commit | 2ec364e94dbc080ccdf6c5dfc6f1653b5b7ded64 (patch) | |
tree | 8d74cacf94aec00987e569244114290683c1bf74 | |
parent | 0cbcd949e15ad95171e5b33881d3a30f17073dda (diff) | |
download | vim-2ec364e94dbc080ccdf6c5dfc6f1653b5b7ded64.zip |
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Problem: After ":copen" can't get the window-ID of the quickfix window.
(FalacerSelene)
Solution: Make it work without a quickfix list. Add a test. (Yegappan
Lakshmanan, closes #2541)
-rw-r--r-- | src/quickfix.c | 37 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 31 insertions, 14 deletions
diff --git a/src/quickfix.c b/src/quickfix.c index 8e745213a..b2dabaaac 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -3421,7 +3421,7 @@ is_qf_win(win_T *win, qf_info_T *qi) /* * Find a window displaying the quickfix/location list 'qi' - * Searches in only the windows opened in the current tab. + * Only searches in the current tabpage. */ static win_T * qf_find_win(qf_info_T *qi) @@ -3430,9 +3430,8 @@ qf_find_win(qf_info_T *qi) FOR_ALL_WINDOWS(win) if (is_qf_win(win, qi)) - break; - - return win; + return win; + return NULL; } /* @@ -4945,6 +4944,24 @@ qf_id2nr(qf_info_T *qi, int_u qfid) } /* + * Return the quickfix/location list window identifier in the current tabpage. + */ + static int +qf_winid(qf_info_T *qi) +{ + win_T *win; + + /* The quickfix window can be opened even if the quickfix list is not set + * using ":copen". This is not true for location lists. */ + if (qi == NULL) + return 0; + win = qf_find_win(qi); + if (win != NULL) + return win->w_id; + return 0; +} + +/* * Return quickfix/location list details (title) as a * dictionary. 'what' contains the details to return. If 'list_idx' is -1, * then current list is used. Otherwise the specified list is used. @@ -5053,7 +5070,7 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) if ((status == OK) && (flags & QF_GETLIST_NR)) status = dict_add_nr_str(retdict, "nr", 0L, NULL); if ((status == OK) && (flags & QF_GETLIST_WINID)) - status = dict_add_nr_str(retdict, "winid", 0L, NULL); + status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL); if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) status = dict_add_nr_str(retdict, "context", 0L, (char_u *)""); if ((status == OK) && (flags & QF_GETLIST_ID)) @@ -5079,15 +5096,7 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) if ((status == OK) && (flags & QF_GETLIST_NR)) status = dict_add_nr_str(retdict, "nr", qf_idx + 1, NULL); if ((status == OK) && (flags & QF_GETLIST_WINID)) - { - win_T *win; - int win_id = 0; - - win = qf_find_win(qi); - if (win != NULL) - win_id = win->w_id; - status = dict_add_nr_str(retdict, "winid", win_id, NULL); - } + status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL); if ((status == OK) && (flags & QF_GETLIST_ITEMS)) { list_T *l = list_alloc(); diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index fb78f6983..71aa7d5b1 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -2906,6 +2906,12 @@ func Xgetlist_empty_tests(cchar) 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 + let qfwinid = (a:cchar == 'c') ? win_getid() : 0 + call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) + Xclose + " Empty quickfix list Xexpr "" call assert_equal('', g:Xgetlist({'context' : 0}).context) diff --git a/src/version.c b/src/version.c index 6362b5527..2a3460edc 100644 --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1432, +/**/ 1431, /**/ 1430, |