Patch 8.1.2315
Problem:    Not always using the right window when jumping to an error.
Solution:   Add the "uselast" flag in 'switchbuf'. (closes #1652)
Files:      runtime/doc/options.txt, src/option.h, src/optionstr.c,
            src/quickfix.c, src/testdir/test_quickfix.vim


*** ../vim-8.1.2314/runtime/doc/options.txt     2019-11-10 21:00:21.418665688 
+0100
--- runtime/doc/options.txt     2019-11-17 17:50:44.692778637 +0100
***************
*** 7415,7420 ****
--- 7417,7424 ----
           vsplit       Just like "split" but split vertically.
           newtab       Like "split", but open a new tab page.  Overrules
                        "split" when both are present.
+          uselast      If included, jump to the previously used window when
+                       jumping to errors with |quickfix| commands.
  
                                                *'synmaxcol'* *'smc'*
  'synmaxcol' 'smc'     number  (default 3000)
*** ../vim-8.1.2314/src/option.h        2019-11-09 23:26:36.901570979 +0100
--- src/option.h        2019-11-17 18:07:30.162709341 +0100
***************
*** 911,921 ****
--- 911,923 ----
  EXTERN char_u *p_sws;         // 'swapsync'
  EXTERN char_u *p_swb;         // 'switchbuf'
  EXTERN unsigned       swb_flags;
+ // Keep in sync with p_swb_values in optionstr.c
  #define SWB_USEOPEN           0x001
  #define SWB_USETAB            0x002
  #define SWB_SPLIT             0x004
  #define SWB_NEWTAB            0x008
  #define SWB_VSPLIT            0x010
+ #define SWB_USELAST           0x020
  EXTERN char_u *p_syn;         // 'syntax'
  EXTERN long   p_ts;           // 'tabstop'
  EXTERN int    p_tbs;          // 'tagbsearch'
*** ../vim-8.1.2314/src/optionstr.c     2019-11-09 23:26:36.905570965 +0100
--- src/optionstr.c     2019-11-17 18:07:32.726682644 +0100
***************
*** 39,45 ****
      "localoptions", "options", "help", "blank", "globals", "slash", "unix",
      "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", NULL};
  #endif
! static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", 
"vsplit", NULL};
  static char *(p_tc_values[]) = {"followic", "ignore", "match", "followscs", 
"smart", NULL};
  #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
  static char *(p_toolbar_values[]) = {"text", "icons", "tooltips", "horiz", 
NULL};
--- 39,46 ----
      "localoptions", "options", "help", "blank", "globals", "slash", "unix",
      "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", NULL};
  #endif
! // Keep in sync with SWB_ flags in option.h
! static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", 
"vsplit", "uselast", NULL};
  static char *(p_tc_values[]) = {"followic", "ignore", "match", "followscs", 
"smart", NULL};
  #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
  static char *(p_toolbar_values[]) = {"text", "icons", "tooltips", "horiz", 
NULL};
*** ../vim-8.1.2314/src/quickfix.c      2019-11-12 22:59:46.556547871 +0100
--- src/quickfix.c      2019-11-17 17:59:09.417679990 +0100
***************
*** 3013,3020 ****
        if (IS_QF_WINDOW(win))
        {
            // Didn't find it, go to the window before the quickfix
!           // window.
!           if (altwin != NULL)
                win = altwin;
            else if (curwin->w_prev != NULL)
                win = curwin->w_prev;
--- 3013,3023 ----
        if (IS_QF_WINDOW(win))
        {
            // Didn't find it, go to the window before the quickfix
!           // window, unless 'switchbuf' contains 'uselast': in this case we
!           // try to jump to the previously used window first.
!           if ((swb_flags & SWB_USELAST) && win_valid(prevwin))
!               win = prevwin;
!           else if (altwin != NULL)
                win = altwin;
            else if (curwin->w_prev != NULL)
                win = curwin->w_prev;
*** ../vim-8.1.2314/src/testdir/test_quickfix.vim       2019-11-16 
21:04:54.324424732 +0100
--- src/testdir/test_quickfix.vim       2019-11-17 17:50:44.696778631 +0100
***************
*** 1664,1669 ****
--- 1664,1677 ----
    call assert_equal(3, tabpagenr('$'))
    tabfirst | enew | tabonly | only
  
+   set switchbuf=uselast
+   split
+   let last_winid = win_getid()
+   copen
+   exe "normal 1G\<CR>"
+   call assert_equal(last_winid, win_getid())
+   enew | only
+ 
    set switchbuf=
    edit Xqftestfile1
    let file1_winid = win_getid()
*** ../vim-8.1.2314/src/version.c       2019-11-17 17:32:24.373473658 +0100
--- src/version.c       2019-11-17 17:50:32.256803044 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     2315,
  /**/

-- 
>From "know your smileys":
 %-)    After staring at screen for 15 hours

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201911171710.xAHHA9vs004055%40masaka.moolenaar.net.

Raspunde prin e-mail lui