Patch 7.4.646
Problem:    ":bufdo" may start at a deleted buffer.
Solution:   Find the first not deleted buffer. (Shane Harper)
Files:      src/ex_cmds2.c, src/testdir/test_command_count.in,
            src/testdir/test_command_count.ok


*** ../vim-7.4.645/src/ex_cmds2.c       2015-01-07 16:52:53.506792420 +0100
--- src/ex_cmds2.c      2015-02-27 20:30:04.087096679 +0100
***************
*** 2440,2446 ****
      win_T     *wp;
      tabpage_T *tp;
  #endif
!     buf_T     *buf;
      int               next_fnum = 0;
  #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
      char_u    *save_ei = NULL;
--- 2440,2446 ----
      win_T     *wp;
      tabpage_T *tp;
  #endif
!     buf_T     *buf = curbuf;
      int               next_fnum = 0;
  #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
      char_u    *save_ei = NULL;
***************
*** 2493,2512 ****
            case CMD_argdo:
                i = eap->line1 - 1;
                break;
-           case CMD_bufdo:
-               i = eap->line1;
-               break;
            default:
                break;
        }
        /* set pcmark now */
        if (eap->cmdidx == CMD_bufdo)
!           goto_buffer(eap, DOBUF_FIRST, FORWARD, i);
        else
            setpcmark();
        listcmd_busy = TRUE;        /* avoids setting pcmark below */
  
!       while (!got_int)
        {
            if (eap->cmdidx == CMD_argdo)
            {
--- 2493,2520 ----
            case CMD_argdo:
                i = eap->line1 - 1;
                break;
            default:
                break;
        }
        /* set pcmark now */
        if (eap->cmdidx == CMD_bufdo)
!         {
!           /* Advance to the first listed buffer after "eap->line1". */
!             for (buf = firstbuf; buf != NULL && (buf->b_fnum < eap->line1
!                                         || !buf->b_p_bl); buf = buf->b_next)
!               if (buf->b_fnum > eap->line2)
!               {
!                   buf = NULL;
!                   break;
!               }
!             if (buf != NULL)
!               goto_buffer(eap, DOBUF_FIRST, FORWARD, buf->b_fnum);
!         }
        else
            setpcmark();
        listcmd_busy = TRUE;        /* avoids setting pcmark below */
  
!       while (!got_int && buf != NULL)
        {
            if (eap->cmdidx == CMD_argdo)
            {
*** ../vim-7.4.645/src/testdir/test_command_count.in    2015-01-27 
13:28:42.472671261 +0100
--- src/testdir/test_command_count.in   2015-02-27 20:03:15.981409267 +0100
***************
*** 141,146 ****
--- 141,147 ----
  :let buffers = ''
  :.,$-bufdo let buffers .= ' '.bufnr('%')
  :call add(g:lines, 'bufdo:' . buffers)
+ :3bd
  :let buffers = ''
  :3,7bufdo let buffers .= ' '.bufnr('%')
  :call add(g:lines, 'bufdo:' . buffers)
*** ../vim-7.4.645/src/testdir/test_command_count.ok    2015-01-20 
13:29:46.397315064 +0100
--- src/testdir/test_command_count.ok   2015-02-27 20:03:15.981409267 +0100
***************
*** 34,38 ****
  argdo: c d e
  windo: 2 3 4
  bufdo: 2 3 4 5 6 7 8 9 10 15
! bufdo: 3 4 5 6 7
  tabdo: 2 3 4
--- 34,38 ----
  argdo: c d e
  windo: 2 3 4
  bufdo: 2 3 4 5 6 7 8 9 10 15
! bufdo: 4 5 6 7
  tabdo: 2 3 4
*** ../vim-7.4.645/src/version.c        2015-02-27 19:34:51.464777369 +0100
--- src/version.c       2015-02-27 20:04:24.336631611 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     646,
  /**/

-- 
The greatest lies of all time:
  (1) The check is in the mail.
  (2) We have a really challenging assignment for you.
  (3) I love you.
  (4) All bugs have been fixed.
  (5) This won't hurt a bit.
  (6) Honey, I just need to debug this program and be home in 5 minutes.
  (7) I have just sent you an e-mail about that.
  (8) Of course I'll respect you in the morning.
  (9) I'm from the government, and I'm here to help you.

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