changeset 23895:e313b6ee2d9c v8.2.2490

patch 8.2.2490: 'wrap' option is always reset when starting diff mode Commit: https://github.com/vim/vim/commit/4223d43c0fb6ead1e611e4469a1680a9228b6015 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 10 13:18:17 2021 +0100 patch 8.2.2490: 'wrap' option is always reset when starting diff mode Problem: 'wrap' option is always reset when starting diff mode. Solution: Add the "followwrap" item in 'diffopt'. (Rick Howe, closes https://github.com/vim/vim/issues/7797)
author Bram Moolenaar <Bram@vim.org>
date Wed, 10 Feb 2021 13:30:03 +0100
parents 543007252974
children d6affe8ae093
files runtime/doc/diff.txt runtime/doc/options.txt src/diff.c src/testdir/test_diffmode.vim src/version.c
diffstat 5 files changed, 38 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -59,7 +59,7 @@ In each of the edited files these option
 	'scrollbind'	on
 	'cursorbind'	on
 	'scrollopt'	includes "hor"
-	'wrap'		off
+	'wrap'		off, or leave as-is if 'diffopt' includes "followwrap"
 	'foldmethod'	"diff"
 	'foldcolumn'	value from 'diffopt', default is 2
 
@@ -144,7 +144,7 @@ Otherwise they are set to their default 
 	'scrollbind'	off
 	'cursorbind'	off
 	'scrollopt'	without "hor"
-	'wrap'		on
+	'wrap'		on, or leave as-is if 'diffopt' includes "followwrap"
 	'foldmethod'	"manual"
 	'foldcolumn'	0
 
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -2677,6 +2677,8 @@ A jump table for the options with a shor
 		foldcolumn:{n}	Set the 'foldcolumn' option to {n} when
 				starting diff mode.  Without this 2 is used.
 
+		followwrap	Follow the 'wrap' option and leave as it is.
+
 		internal	Use the internal diff library.  This is
 				ignored when 'diffexpr' is set.  *E960*
 				When running out of memory when writing a
--- a/src/diff.c
+++ b/src/diff.c
@@ -36,6 +36,7 @@ static int diff_need_update = FALSE; // 
 #define DIFF_HIDDEN_OFF	0x100	// diffoff when hidden
 #define DIFF_INTERNAL	0x200	// use internal xdiff algorithm
 #define DIFF_CLOSE_OFF	0x400	// diffoff when closing window
+#define DIFF_FOLLOWWRAP	0x800	// follow the wrap option
 #define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
 static int	diff_flags = DIFF_INTERNAL | DIFF_FILLER | DIFF_CLOSE_OFF;
 
@@ -1454,9 +1455,12 @@ diff_win_options(
     if (!wp->w_p_diff)
 	wp->w_p_crb_save = wp->w_p_crb;
     wp->w_p_crb = TRUE;
-    if (!wp->w_p_diff)
-	wp->w_p_wrap_save = wp->w_p_wrap;
-    wp->w_p_wrap = FALSE;
+    if (!(diff_flags & DIFF_FOLLOWWRAP))
+    {
+        if (!wp->w_p_diff)
+	    wp->w_p_wrap_save = wp->w_p_wrap;
+        wp->w_p_wrap = FALSE;
+    }
 # ifdef FEAT_FOLDING
     if (!wp->w_p_diff)
     {
@@ -1517,8 +1521,11 @@ ex_diffoff(exarg_T *eap)
 		    wp->w_p_scb = wp->w_p_scb_save;
 		if (wp->w_p_crb)
 		    wp->w_p_crb = wp->w_p_crb_save;
-		if (!wp->w_p_wrap)
-		    wp->w_p_wrap = wp->w_p_wrap_save;
+		if (!(diff_flags & DIFF_FOLLOWWRAP))
+		{
+		    if (!wp->w_p_wrap)
+		        wp->w_p_wrap = wp->w_p_wrap_save;
+		}
 #ifdef FEAT_FOLDING
 		free_string_option(wp->w_p_fdm);
 		wp->w_p_fdm = vim_strsave(
@@ -2245,6 +2252,11 @@ diffopt_changed(void)
 	    p += 8;
 	    diff_flags_new |= DIFF_CLOSE_OFF;
 	}
+	else if (STRNCMP(p, "followwrap", 10) == 0)
+	{
+	    p += 10;
+	    diff_flags_new |= DIFF_FOLLOWWRAP;
+	}
 	else if (STRNCMP(p, "indent-heuristic", 16) == 0)
 	{
 	    p += 16;
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -1045,6 +1045,21 @@ func Test_diff_closeoff()
   enew!
 endfunc
 
+func Test_diff_followwrap()
+  new
+  set diffopt+=followwrap
+  set wrap
+  diffthis
+  call assert_equal(1, &wrap)
+  diffoff
+  set nowrap
+  diffthis
+  call assert_equal(0, &wrap)
+  diffoff
+  set diffopt&
+  bwipe!
+endfunc
+
 func Test_diff_maintains_change_mark()
   enew!
   call setline(1, ['a', 'b', 'c', 'd'])
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2490,
+/**/
     2489,
 /**/
     2488,