Mercurial > vim
diff src/quickfix.c @ 5062:761cef8f5d1d v7.3.1274
updated for version 7.3.1274
Problem: When selecting an entry from a location list it may pick an
arbitrary window or open a new one.
Solution: Prefer using a window related to the location list. (Lech Lorens)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 30 Jun 2013 13:57:45 +0200 |
parents | 30910831e5b0 |
children | 14e7a115d54d |
line wrap: on
line diff
--- a/src/quickfix.c +++ b/src/quickfix.c @@ -1616,6 +1616,8 @@ qf_jump(qi, dir, errornr, forceit) */ if (bt_quickfix(curbuf) && !opened_window) { + win_T *usable_win_ptr = NULL; + /* * If there is no file specified, we don't know where to go. * But do advance, otherwise ":cn" gets stuck. @@ -1623,14 +1625,29 @@ qf_jump(qi, dir, errornr, forceit) if (qf_ptr->qf_fnum == 0) goto theend; - /* Locate a window showing a normal buffer */ usable_win = 0; - FOR_ALL_WINDOWS(win) - if (win->w_buffer->b_p_bt[0] == NUL) - { - usable_win = 1; - break; - } + + ll_ref = curwin->w_llist_ref; + if (ll_ref != NULL) + { + /* Find a window using the same location list that is not a + * quickfix window. */ + FOR_ALL_WINDOWS(usable_win_ptr) + if (usable_win_ptr->w_llist == ll_ref + && usable_win_ptr->w_buffer->b_p_bt[0] != 'q') + break; + } + + if (!usable_win) + { + /* Locate a window showing a normal buffer */ + FOR_ALL_WINDOWS(win) + if (win->w_buffer->b_p_bt[0] == NUL) + { + usable_win = 1; + break; + } + } /* * If no usable window is found and 'switchbuf' contains "usetab" @@ -1659,8 +1676,6 @@ win_found: */ if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win) { - ll_ref = curwin->w_llist_ref; - flags = WSP_ABOVE; if (ll_ref != NULL) flags |= WSP_NEWLOC; @@ -1683,12 +1698,7 @@ win_found: if (curwin->w_llist_ref != NULL) { /* In a location window */ - ll_ref = curwin->w_llist_ref; - - /* Find the window with the same location list */ - FOR_ALL_WINDOWS(win) - if (win->w_llist == ll_ref) - break; + win = usable_win_ptr; if (win == NULL) { /* Find the window showing the selected file */