diff --git a/7.4.700 b/7.4.700 new file mode 100644 index 0000000..c8e0f15 --- /dev/null +++ b/7.4.700 @@ -0,0 +1,125 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.700 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.700 +Problem: Fold can't be opened after ":move". (Ein Brown) +Solution: Delete the folding information and update it afterwards. + (Christian Brabandt) +Files: src/ex_cmds.c, src/fold.c, src/testdir/test45.in, + src/testdir/test45.ok + + +*** ../vim-7.4.699/src/ex_cmds.c 2015-03-31 13:33:00.793524956 +0200 +--- src/ex_cmds.c 2015-04-15 12:35:27.510465352 +0200 +*************** +*** 741,746 **** +--- 741,756 ---- + linenr_T extra; /* Num lines added before line1 */ + linenr_T num_lines; /* Num lines moved */ + linenr_T last_line; /* Last line in file after adding new text */ ++ #ifdef FEAT_FOLDING ++ int isFolded; ++ ++ /* Moving lines seems to corrupt the folds, delete folding info now ++ * and recreate it when finished. Don't do this for manual folding, it ++ * would delete all folds. */ ++ isFolded = hasAnyFolding(curwin) && !foldmethodIsManual(curwin); ++ if (isFolded) ++ deleteFoldRecurse(&curwin->w_folds); ++ #endif + + if (dest >= line1 && dest < line2) + { +*************** +*** 839,844 **** +--- 849,860 ---- + else + changed_lines(dest + 1, 0, line1 + num_lines, 0L); + ++ #ifdef FEAT_FOLDING ++ /* recreate folds */ ++ if (isFolded) ++ foldUpdateAll(curwin); ++ #endif ++ + return OK; + } + +*** ../vim-7.4.699/src/fold.c 2015-04-13 20:52:31.744841858 +0200 +--- src/fold.c 2015-04-15 12:32:53.216048664 +0200 +*************** +*** 847,854 **** + fold_T *fp; + + /* Mark all folds from top to bot as maybe-small. */ +! (void)foldFind(&curwin->w_folds, top, &fp); +! while (fp < (fold_T *)curwin->w_folds.ga_data + curwin->w_folds.ga_len + && fp->fd_top < bot) + { + fp->fd_small = MAYBE; +--- 847,854 ---- + fold_T *fp; + + /* Mark all folds from top to bot as maybe-small. */ +! (void)foldFind(&wp->w_folds, top, &fp); +! while (fp < (fold_T *)wp->w_folds.ga_data + wp->w_folds.ga_len + && fp->fd_top < bot) + { + fp->fd_small = MAYBE; +*** ../vim-7.4.699/src/testdir/test45.in 2010-05-15 13:04:10.000000000 +0200 +--- src/testdir/test45.in 2015-04-15 12:31:42.396804175 +0200 +*************** +*** 63,68 **** +--- 63,78 ---- + :call append("$", foldlevel(".")) + :/^last/+1,$w! test.out + :delfun Flvl ++ :new ++ iTest fdm=indent and :move bug END ++ line2 ++ Test fdm=indent START ++ line3 ++ line4 ++ :set fdm=indent ++ :1m1 ++ 2jzc:m0 ++ :%w >> test.out + :qa! + ENDTEST + +*** ../vim-7.4.699/src/testdir/test45.ok 2010-05-15 13:04:10.000000000 +0200 +--- src/testdir/test45.ok 2015-04-15 12:31:42.400804132 +0200 +*************** +*** 16,18 **** +--- 16,23 ---- + 1 + 2 + 0 ++ Test fdm=indent START ++ line3 ++ line4 ++ Test fdm=indent and :move bug END ++ line2 +*** ../vim-7.4.699/src/version.c 2015-04-13 20:52:31.744841858 +0200 +--- src/version.c 2015-04-15 12:43:01.329818386 +0200 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 700, + /**/ + +-- +Computers make very fast, very accurate, mistakes. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///