]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1274 v7.3.1274
authorBram Moolenaar <Bram@vim.org>
Sun, 30 Jun 2013 11:57:45 +0000 (13:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 30 Jun 2013 11:57:45 +0000 (13:57 +0200)
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)

src/quickfix.c
src/version.c

index b11ddd255b9b039d89f20d48f2704c9f0bc75140..f7897850ea1596d9740284253a6511bdb21f2bec 100644 (file)
@@ -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 */
index ea90de9c7d3af5a5200132dd3c43c387b7f1a6ae..99c54b7f6c995bc88383cf9b2581299e115ec95a 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1274,
 /**/
     1273,
 /**/