Patch 8.0.0574
Problem:    Get only one quickfix list after :caddbuf.
Solution:   Reset qf_multiline. (Yegappan Lakshmanan)
Files:      src/quickfix.c, src/testdir/test_quickfix.vim


*** ../vim-8.0.0573/src/quickfix.c      2017-04-15 15:22:47.508245073 +0200
--- src/quickfix.c      2017-04-20 22:35:30.607844825 +0200
***************
*** 2750,2761 ****
--- 2750,2767 ----
      vim_free(qi->qf_lists[idx].qf_title);
      qi->qf_lists[idx].qf_title = NULL;
      qi->qf_lists[idx].qf_index = 0;
+     qi->qf_lists[idx].qf_start = NULL;
      qi->qf_lists[idx].qf_last = NULL;
+     qi->qf_lists[idx].qf_ptr = NULL;
+     qi->qf_lists[idx].qf_nonevalid = TRUE;
  
      qf_clean_dir_stack(&qi->qf_dir_stack);
      qi->qf_directory = NULL;
      qf_clean_dir_stack(&qi->qf_file_stack);
      qi->qf_currfile = NULL;
+     qi->qf_multiline = FALSE;
+     qi->qf_multiignore = FALSE;
+     qi->qf_multiscan = FALSE;
  }
  
  /*
***************
*** 4923,4928 ****
--- 4929,4935 ----
        /* If the location list window is open, then create a new empty
         * location list */
        qf_info_T *new_ll = ll_new_list();
+ 
        orig_wp->w_llist_ref = new_ll;
        if (llwin != NULL)
        {
*** ../vim-8.0.0573/src/testdir/test_quickfix.vim       2017-04-02 
15:15:44.825083189 +0200
--- src/testdir/test_quickfix.vim       2017-04-20 22:37:45.246969386 +0200
***************
*** 24,31 ****
      command! -nargs=* Xgetbuffer <mods>cgetbuffer <args>
      command! -nargs=* Xaddbuffer <mods>caddbuffer <args>
      command! -nargs=* Xrewind <mods>crewind <args>
!     command! -nargs=* -bang Xnext <mods>cnext<bang> <args>
!     command! -nargs=* -bang Xprev <mods>cprev<bang> <args>
      command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args>
      command! -nargs=* -bang Xlast <mods>clast<bang> <args>
      command! -nargs=* -bang Xnfile <mods>cnfile<bang> <args>
--- 24,31 ----
      command! -nargs=* Xgetbuffer <mods>cgetbuffer <args>
      command! -nargs=* Xaddbuffer <mods>caddbuffer <args>
      command! -nargs=* Xrewind <mods>crewind <args>
!     command! -count -nargs=* -bang Xnext <mods><count>cnext<bang> <args>
!     command! -count -nargs=* -bang Xprev <mods><count>cprev<bang> <args>
      command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args>
      command! -nargs=* -bang Xlast <mods>clast<bang> <args>
      command! -nargs=* -bang Xnfile <mods>cnfile<bang> <args>
***************
*** 56,63 ****
      command! -nargs=* Xgetbuffer <mods>lgetbuffer <args>
      command! -nargs=* Xaddbuffer <mods>laddbuffer <args>
      command! -nargs=* Xrewind <mods>lrewind <args>
!     command! -nargs=* -bang Xnext <mods>lnext<bang> <args>
!     command! -nargs=* -bang Xprev <mods>lprev<bang> <args>
      command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args>
      command! -nargs=* -bang Xlast <mods>llast<bang> <args>
      command! -nargs=* -bang Xnfile <mods>lnfile<bang> <args>
--- 56,63 ----
      command! -nargs=* Xgetbuffer <mods>lgetbuffer <args>
      command! -nargs=* Xaddbuffer <mods>laddbuffer <args>
      command! -nargs=* Xrewind <mods>lrewind <args>
!     command! -count -nargs=* -bang Xnext <mods><count>lnext<bang> <args>
!     command! -count -nargs=* -bang Xprev <mods><count>lprev<bang> <args>
      command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args>
      command! -nargs=* -bang Xlast <mods>llast<bang> <args>
      command! -nargs=* -bang Xnfile <mods>lnfile<bang> <args>
***************
*** 395,401 ****
    Xgetexpr ['Xqftestfile1:5:Line5',
                \ 'Xqftestfile1:6:Line6',
                \ 'Xqftestfile2:10:Line10',
!               \ 'Xqftestfile2:11:Line11']
  
    Xfirst
    call assert_fails('Xprev', 'E553')
--- 395,403 ----
    Xgetexpr ['Xqftestfile1:5:Line5',
                \ 'Xqftestfile1:6:Line6',
                \ 'Xqftestfile2:10:Line10',
!               \ 'Xqftestfile2:11:Line11',
!               \ 'RegularLine1',
!               \ 'RegularLine2']
  
    Xfirst
    call assert_fails('Xprev', 'E553')
***************
*** 407,412 ****
--- 409,415 ----
    call assert_equal('Xqftestfile1', bufname('%'))
    call assert_equal(6, line('.'))
    Xlast
+   Xprev
    call assert_equal('Xqftestfile2', bufname('%'))
    call assert_equal(11, line('.'))
    call assert_fails('Xnext', 'E553')
***************
*** 415,420 ****
--- 418,430 ----
    call assert_equal('Xqftestfile1', bufname('%'))
    call assert_equal(5, line('.'))
  
+   10Xnext
+   call assert_equal('Xqftestfile2', bufname('%'))
+   call assert_equal(11, line('.'))
+   10Xprev
+   call assert_equal('Xqftestfile1', bufname('%'))
+   call assert_equal(5, line('.'))
+ 
    Xexpr ""
    call assert_fails('Xnext', 'E42:')
  
***************
*** 455,463 ****
--- 465,494 ----
      let title_text = ':lhelpgrep quickfix'
    endif
    call assert_true(w:quickfix_title =~ title_text, w:quickfix_title)
+ 
+   " Jumping to a help topic should open the help window
+   only
+   Xnext
+   call assert_true(&buftype == 'help')
+   call assert_true(winnr('$') == 2)
+   " Jumping to the next match should reuse the help window
+   Xnext
+   call assert_true(&buftype == 'help')
+   call assert_true(winnr() == 1)
+   call assert_true(winnr('$') == 2)
+   " Jumping to the next match from the quickfix window should reuse the help
+   " window
+   Xopen
+   Xnext
+   call assert_true(&buftype == 'help')
+   call assert_true(winnr() == 1)
+   call assert_true(winnr('$') == 2)
+ 
    " This wipes out the buffer, make sure that doesn't cause trouble.
    Xclose
  
+   new | only
+ 
    " Search for non existing help string
    call assert_fails('Xhelpgrep a1b2c3', 'E480:')
  endfunc
***************
*** 596,605 ****
      lrewind
      enew
      lopen
!     lnext
!     lnext
!     lnext
!     lnext
      vert split
      wincmd L
      lopen
--- 627,633 ----
      lrewind
      enew
      lopen
!     4lnext
      vert split
      wincmd L
      lopen
***************
*** 1057,1062 ****
--- 1085,1109 ----
    call assert_equal(1, l[4].valid)
    call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr))
  
+   " The following sequence of commands used to crash Vim
+   set efm=%W%m
+   cgetexpr ['msg1']
+   let l = getqflist()
+   call assert_equal(1, len(l), string(l))
+   call assert_equal('msg1', l[0].text)
+   set efm=%C%m
+   lexpr 'msg2'
+   let l = getloclist(0)
+   call assert_equal(1, len(l), string(l))
+   call assert_equal('msg2', l[0].text)
+   lopen
+   call setqflist([], 'r')
+   caddbuf
+   let l = getqflist()
+   call assert_equal(1, len(l), string(l))
+   call assert_equal('|| msg2', l[0].text)
+ 
+   new | only
    let &efm = save_efm
  endfunc
  
***************
*** 1387,1404 ****
    let winid = win_getid()
    cfirst | cnext
    call assert_equal(winid, win_getid())
!   cnext | cnext
    call assert_equal(winid, win_getid())
!   cnext | cnext
    call assert_equal(winid, win_getid())
    enew
  
    set switchbuf=useopen
    cfirst | cnext
    call assert_equal(file1_winid, win_getid())
!   cnext | cnext
    call assert_equal(file2_winid, win_getid())
!   cnext | cnext
    call assert_equal(file2_winid, win_getid())
  
    enew | only
--- 1434,1451 ----
    let winid = win_getid()
    cfirst | cnext
    call assert_equal(winid, win_getid())
!   2cnext
    call assert_equal(winid, win_getid())
!   2cnext
    call assert_equal(winid, win_getid())
    enew
  
    set switchbuf=useopen
    cfirst | cnext
    call assert_equal(file1_winid, win_getid())
!   2cnext
    call assert_equal(file2_winid, win_getid())
!   2cnext
    call assert_equal(file2_winid, win_getid())
  
    enew | only
***************
*** 1408,1416 ****
    tabfirst
    cfirst | cnext
    call assert_equal(2, tabpagenr())
!   cnext | cnext
    call assert_equal(3, tabpagenr())
!   cnext | cnext
    call assert_equal(3, tabpagenr())
    tabfirst | tabonly | enew
  
--- 1455,1463 ----
    tabfirst
    cfirst | cnext
    call assert_equal(2, tabpagenr())
!   2cnext
    call assert_equal(3, tabpagenr())
!   2cnext
    call assert_equal(3, tabpagenr())
    tabfirst | tabonly | enew
  
***************
*** 1975,1977 ****
--- 2022,2036 ----
    call XfreeTests('c')
    call XfreeTests('l')
  endfunc
+ 
+ func Test_no_reuse_mem()
+   set efm=E,%W%m,
+   cgetexpr ['C']
+   set efm=%C%m
+   lexpr '0'
+   lopen
+   call setqflist([], 'r')
+   caddbuf
+ 
+   set efm&
+ endfunc
*** ../vim-8.0.0573/src/version.c       2017-04-20 22:32:19.857087086 +0200
--- src/version.c       2017-04-20 22:42:48.896998852 +0200
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     574,
  /**/

-- 
Q: How does a UNIX Guru pick up a girl?
A: look; grep; which; eval; nice; uname; talk; date;

 /// 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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui