diff src/quickfix.c @ 13115:9812a9ca3ab2 v8.0.1432

patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window commit https://github.com/vim/vim/commit/2ec364e94dbc080ccdf6c5dfc6f1653b5b7ded64 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 27 11:52:13 2018 +0100 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)
author Christian Brabandt <cb@256bit.org>
date Sat, 27 Jan 2018 12:00:06 +0100
parents bfa7f5b23c53
children ac42c4b11dbc
line wrap: on
line diff
--- 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 *wha
 	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 *wha
     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();