diff --git a/7.2.078 b/7.2.078 new file mode 100644 index 0000000..0e127bc --- /dev/null +++ b/7.2.078 @@ -0,0 +1,120 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.078 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +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 -- Bram@Moolenaar.net -- 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 ///