Patch 8.0.1353
Problem:    QuickFixCmdPost is not used consistently.
Solution:   Invoke QuickFixCmdPost consistently after QuickFixCmdPre.
            (Yegappan Lakshmanan, closes #2377)
Files:      src/quickfix.c, src/testdir/test_quickfix.vim


*** ../vim-8.0.1352/src/quickfix.c      2017-11-23 22:05:41.156900903 +0100
--- src/quickfix.c      2017-11-28 17:24:02.988551861 +0100
***************
*** 4055,4060 ****
--- 4055,4061 ----
  #ifdef FEAT_AUTOCMD
      char_u    *au_name = NULL;
  #endif
+     int               res;
  
      if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
                                               || eap->cmdidx == CMD_laddfile)
***************
*** 4102,4129 ****
       * :caddfile adds to an existing quickfix list. If there is no
       * quickfix list then a new list is created.
       */
!     if (qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
!                                 && eap->cmdidx != CMD_laddfile),
!                                                      *eap->cmdlinep, enc) > 0
!                                 && (eap->cmdidx == CMD_cfile
!                                            || eap->cmdidx == CMD_lfile))
!     {
  #ifdef FEAT_AUTOCMD
!       if (au_name != NULL)
!           apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
  #endif
        if (wp != NULL)
            qi = GET_LOC_LIST(wp);
        qf_jump(qi, 0, 0, eap->forceit);        /* display first error */
      }
- 
-     else
-     {
- #ifdef FEAT_AUTOCMD
-       if (au_name != NULL)
-           apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
- #endif
-     }
  }
  
  /*
--- 4103,4120 ----
       * :caddfile adds to an existing quickfix list. If there is no
       * quickfix list then a new list is created.
       */
!     res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
!                       && eap->cmdidx != CMD_laddfile), *eap->cmdlinep, enc);
  #ifdef FEAT_AUTOCMD
!     if (au_name != NULL)
!       apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
  #endif
+     if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile))
+     {
        if (wp != NULL)
            qi = GET_LOC_LIST(wp);
        qf_jump(qi, 0, 0, eap->forceit);        /* display first error */
      }
  }
  
  /*
***************
*** 5450,5455 ****
--- 5441,5447 ----
  #ifdef FEAT_AUTOCMD
      char_u    *au_name = NULL;
  #endif
+     int               res;
  
      if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer
            || eap->cmdidx == CMD_laddbuffer)
***************
*** 5509,5528 ****
                qf_title = IObuff;
            }
  
!           if (qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
                            (eap->cmdidx != CMD_caddbuffer
                             && eap->cmdidx != CMD_laddbuffer),
                                                   eap->line1, eap->line2,
!                                                  qf_title, NULL) > 0)
!           {
  #ifdef FEAT_AUTOCMD
!               if (au_name != NULL)
!                   apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
!                           curbuf->b_fname, TRUE, curbuf);
! #endif
!               if (eap->cmdidx == CMD_cbuffer || eap->cmdidx == CMD_lbuffer)
!                   qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
!           }
        }
      }
  }
--- 5501,5519 ----
                qf_title = IObuff;
            }
  
!           res = qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
                            (eap->cmdidx != CMD_caddbuffer
                             && eap->cmdidx != CMD_laddbuffer),
                                                   eap->line1, eap->line2,
!                                                  qf_title, NULL);
  #ifdef FEAT_AUTOCMD
!           if (au_name != NULL)
!               apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
!                                               curbuf->b_fname, TRUE, curbuf);
! #endif
!           if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
!                                               eap->cmdidx == CMD_lbuffer))
!               qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
        }
      }
  }
***************
*** 5540,5545 ****
--- 5531,5537 ----
  #ifdef FEAT_AUTOCMD
      char_u    *au_name = NULL;
  #endif
+     int               res;
  
      if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr
            || eap->cmdidx == CMD_laddexpr)
***************
*** 5578,5597 ****
        if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
                || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
        {
!           if (qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
                            (eap->cmdidx != CMD_caddexpr
                             && eap->cmdidx != CMD_laddexpr),
                                 (linenr_T)0, (linenr_T)0, *eap->cmdlinep,
!                                NULL) > 0)
!           {
  #ifdef FEAT_AUTOCMD
!               if (au_name != NULL)
!                   apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
!                           curbuf->b_fname, TRUE, curbuf);
! #endif
!               if (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr)
!                   qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
!           }
        }
        else
            EMSG(_("E777: String or List expected"));
--- 5570,5588 ----
        if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
                || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
        {
!           res = qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
                            (eap->cmdidx != CMD_caddexpr
                             && eap->cmdidx != CMD_laddexpr),
                                 (linenr_T)0, (linenr_T)0, *eap->cmdlinep,
!                                NULL);
  #ifdef FEAT_AUTOCMD
!           if (au_name != NULL)
!               apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
!                                               curbuf->b_fname, TRUE, curbuf);
! #endif
!           if (res > 0 && (eap->cmdidx == CMD_cexpr ||
!                                               eap->cmdidx == CMD_lexpr))
!               qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
        }
        else
            EMSG(_("E777: String or List expected"));
*** ../vim-8.0.1352/src/testdir/test_quickfix.vim       2017-10-27 
00:54:59.146125099 +0200
--- src/testdir/test_quickfix.vim       2017-11-28 17:24:02.992551838 +0100
***************
*** 1966,1991 ****
    cexpr "F1:10:Line 10"
    caddexpr "F1:20:Line 20"
    cgetexpr "F1:30:Line 30"
!   enew! | call append(0, "F2:10:Line 10")
!   cbuffer!
!   enew! | call append(0, "F2:20:Line 20")
!   cgetbuffer
!   enew! | call append(0, "F2:30:Line 30")
!   caddbuffer
! 
    let l = ['precexpr',
              \ 'postcexpr',
              \ 'precaddexpr',
              \ 'postcaddexpr',
              \ 'precgetexpr',
              \ 'postcgetexpr',
!             \ 'precbuffer',
              \ 'postcbuffer',
              \ 'precgetbuffer',
              \ 'postcgetbuffer',
              \ 'precaddbuffer',
!             \ 'postcaddbuffer']
    call assert_equal(l, g:acmds)
  endfunc
  
  func Test_Autocmd_Exception()
--- 1966,2101 ----
    cexpr "F1:10:Line 10"
    caddexpr "F1:20:Line 20"
    cgetexpr "F1:30:Line 30"
!   cexpr ""
!   caddexpr ""
!   cgetexpr ""
!   silent! cexpr non_existing_func()
!   silent! caddexpr non_existing_func()
!   silent! cgetexpr non_existing_func()
    let l = ['precexpr',
              \ 'postcexpr',
              \ 'precaddexpr',
              \ 'postcaddexpr',
              \ 'precgetexpr',
              \ 'postcgetexpr',
!             \ 'precexpr',
!             \ 'postcexpr',
!             \ 'precaddexpr',
!             \ 'postcaddexpr',
!             \ 'precgetexpr',
!             \ 'postcgetexpr',
!             \ 'precexpr',
!             \ 'precaddexpr',
!             \ 'precgetexpr']
!   call assert_equal(l, g:acmds)
! 
!   let g:acmds = []
!   enew! | call append(0, "F2:10:Line 10")
!   cbuffer!
!   enew! | call append(0, "F2:20:Line 20")
!   cgetbuffer
!   enew! | call append(0, "F2:30:Line 30")
!   caddbuffer
!   new
!   let bnum = bufnr('%')
!   bunload
!   exe 'silent! cbuffer! ' . bnum
!   exe 'silent! cgetbuffer ' . bnum
!   exe 'silent! caddbuffer ' . bnum
!   enew!
!   let l = ['precbuffer',
              \ 'postcbuffer',
              \ 'precgetbuffer',
              \ 'postcgetbuffer',
              \ 'precaddbuffer',
!             \ 'postcaddbuffer',
!             \ 'precbuffer',
!             \ 'precgetbuffer',
!             \ 'precaddbuffer']
!   call assert_equal(l, g:acmds)
! 
!   call writefile(['Xtest:1:Line1'], 'Xtest')
!   call writefile([], 'Xempty')
!   let g:acmds = []
!   cfile Xtest
!   caddfile Xtest
!   cgetfile Xtest
!   cfile Xempty
!   caddfile Xempty
!   cgetfile Xempty
!   silent! cfile do_not_exist
!   silent! caddfile do_not_exist
!   silent! cgetfile do_not_exist
!   let l = ['precfile',
!             \ 'postcfile',
!             \ 'precaddfile',
!             \ 'postcaddfile',
!             \ 'precgetfile',
!             \ 'postcgetfile',
!             \ 'precfile',
!             \ 'postcfile',
!             \ 'precaddfile',
!             \ 'postcaddfile',
!             \ 'precgetfile',
!             \ 'postcgetfile',
!             \ 'precfile',
!             \ 'postcfile',
!             \ 'precaddfile',
!             \ 'postcaddfile',
!             \ 'precgetfile',
!             \ 'postcgetfile']
    call assert_equal(l, g:acmds)
+ 
+   let g:acmds = []
+   helpgrep quickfix
+   silent! helpgrep non_existing_help_topic
+   vimgrep test Xtest
+   vimgrepadd test Xtest
+   silent! vimgrep non_existing_test Xtest
+   silent! vimgrepadd non_existing_test Xtest
+   set makeprg=
+   silent! make
+   set makeprg&
+   let l = ['prehelpgrep',
+             \ 'posthelpgrep',
+             \ 'prehelpgrep',
+             \ 'posthelpgrep',
+             \ 'previmgrep',
+             \ 'postvimgrep',
+             \ 'previmgrepadd',
+             \ 'postvimgrepadd',
+             \ 'previmgrep',
+             \ 'postvimgrep',
+             \ 'previmgrepadd',
+             \ 'postvimgrepadd',
+             \ 'premake',
+             \ 'postmake']
+   call assert_equal(l, g:acmds)
+ 
+   if has('unix')
+     " Run this test only on Unix-like systems. The grepprg may not be set on
+     " non-Unix systems.
+     " The following lines are used for the grep test. Don't remove.
+     " Grep_Autocmd_Text: Match 1
+     " GrepAdd_Autocmd_Text: Match 2
+     let g:acmds = []
+     silent grep Grep_Autocmd_Text test_quickfix.vim
+     silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim
+     silent grep abc123def Xtest
+     silent grepadd abc123def Xtest
+     let l = ['pregrep',
+               \ 'postgrep',
+               \ 'pregrepadd',
+               \ 'postgrepadd',
+               \ 'pregrep',
+               \ 'postgrep',
+               \ 'pregrepadd',
+               \ 'postgrepadd']
+     call assert_equal(l, g:acmds)
+   endif
+ 
+   call delete('Xtest')
+   call delete('Xempty')
  endfunc
  
  func Test_Autocmd_Exception()
*** ../vim-8.0.1352/src/version.c       2017-11-28 14:18:51.093377778 +0100
--- src/version.c       2017-11-28 17:25:35.312024490 +0100
***************
*** 773,774 ****
--- 773,776 ----
  {   /* Add new patch number below this line */
+ /**/
+     1353,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
45. You buy a Captain Kirk chair with a built-in keyboard and mouse.

 /// 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