diff src/mark.c @ 11140:6b26e044b6f5 v8.0.0457

patch 8.0.0457: using :move messes up manual folds commit https://github.com/vim/vim/commit/88d298aed8682eac872ebfe40df3112a6acd83e8 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Mar 14 21:53:58 2017 +0100 patch 8.0.0457: using :move messes up manual folds Problem: Using :move messes up manual folds. Solution: Split adjusting marks and folds. Add foldMoveRange(). (neovim patch #6221)
author Christian Brabandt <cb@256bit.org>
date Tue, 14 Mar 2017 22:00:05 +0100
parents 506f5d8b7d8b
children 501f46f7644c
line wrap: on
line diff
--- a/src/mark.c
+++ b/src/mark.c
@@ -37,6 +37,8 @@ static void cleanup_jumplist(void);
 #ifdef FEAT_VIMINFO
 static void write_one_filemark(FILE *fp, xfmark_T *fm, int c1, int c2);
 #endif
+static void mark_adjust_internal(linenr_T line1, linenr_T line2, long amount,
+    long amount_after, int adjust_folds);
 
 /*
  * Set named mark "c" at current cursor position.
@@ -1029,6 +1031,27 @@ mark_adjust(
     long	amount,
     long	amount_after)
 {
+    mark_adjust_internal(line1, line2, amount, amount_after, TRUE);
+}
+
+    void
+mark_adjust_nofold(
+    linenr_T line1,
+    linenr_T line2,
+    long amount,
+    long amount_after)
+{
+    mark_adjust_internal(line1, line2, amount, amount_after, FALSE);
+}
+
+    static void
+mark_adjust_internal(
+    linenr_T line1,
+    linenr_T line2,
+    long amount,
+    long amount_after,
+    int adjust_folds UNUSED)
+{
     int		i;
     int		fnum = curbuf->b_fnum;
     linenr_T	*lp;
@@ -1174,7 +1197,8 @@ mark_adjust(
 
 #ifdef FEAT_FOLDING
 	    /* adjust folds */
-	    foldMarkAdjust(win, line1, line2, amount, amount_after);
+	    if (adjust_folds)
+		foldMarkAdjust(win, line1, line2, amount, amount_after);
 #endif
 	}
     }