Patch 7.2.078
Problem:    When deleting a fold that is specified with markers the cursor
            position may be wrong.  Folds may not be displayed properly after
            a delete.  Wrong fold may be deleted.
Solution:   Fix the problems. (mostly by Lech Lorens)
Files:      src/fold.c


*** ../vim-7.2.077/src/fold.c   Fri Nov 28 21:26:50 2008
--- src/fold.c  Tue Jan  6 14:53:26 2009
***************
*** 740,746 ****
      garray_T  *found_ga;
      fold_T    *found_fp = NULL;
      linenr_T  found_off = 0;
!     int               use_level = FALSE;
      int               maybe_small = FALSE;
      int               level = 0;
      linenr_T  lnum = start;
--- 740,746 ----
      garray_T  *found_ga;
      fold_T    *found_fp = NULL;
      linenr_T  found_off = 0;
!     int               use_level;
      int               maybe_small = FALSE;
      int               level = 0;
      linenr_T  lnum = start;
***************
*** 757,762 ****
--- 757,763 ----
        gap = &curwin->w_folds;
        found_ga = NULL;
        lnum_off = 0;
+       use_level = FALSE;
        for (;;)
        {
            if (!foldFind(gap, lnum - lnum_off, &fp))
***************
*** 783,802 ****
        else
        {
            lnum = found_fp->fd_top + found_fp->fd_len + found_off;
-           did_one = TRUE;
  
            if (foldmethodIsManual(curwin))
                deleteFoldEntry(found_ga,
                    (int)(found_fp - (fold_T *)found_ga->ga_data), recursive);
            else
            {
!               if (found_fp->fd_top + found_off < first_lnum)
!                   first_lnum = found_fp->fd_top;
!               if (lnum > last_lnum)
                    last_lnum = lnum;
!               parseMarker(curwin);
                deleteFoldMarkers(found_fp, recursive, found_off);
            }
  
            /* redraw window */
            changed_window_setting();
--- 784,804 ----
        else
        {
            lnum = found_fp->fd_top + found_fp->fd_len + found_off;
  
            if (foldmethodIsManual(curwin))
                deleteFoldEntry(found_ga,
                    (int)(found_fp - (fold_T *)found_ga->ga_data), recursive);
            else
            {
!               if (first_lnum > found_fp->fd_top + found_off)
!                   first_lnum = found_fp->fd_top + found_off;
!               if (last_lnum < lnum)
                    last_lnum = lnum;
!               if (!did_one)
!                   parseMarker(curwin);
                deleteFoldMarkers(found_fp, recursive, found_off);
            }
+           did_one = TRUE;
  
            /* redraw window */
            changed_window_setting();
***************
*** 811,816 ****
--- 813,822 ----
            redraw_curbuf_later(INVERTED);
  #endif
      }
+     else
+       /* Deleting markers may make cursor column invalid. */
+       check_cursor_col();
+ 
      if (last_lnum > 0)
        changed_lines(first_lnum, (colnr_T)0, last_lnum, 0L);
  }
*** ../vim-7.2.077/src/version.c        Wed Dec 31 16:20:54 2008
--- src/version.c       Tue Jan  6 15:00:36 2009
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     78,
  /**/

-- 
Looking at Perl through Lisp glasses, Perl looks atrocious.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui