]> granicus.if.org Git - vim/commitdiff
patch 8.2.2490: 'wrap' option is always reset when starting diff mode v8.2.2490
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2021 12:18:17 +0000 (13:18 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2021 12:18:17 +0000 (13:18 +0100)
Problem:    'wrap' option is always reset when starting diff mode.
Solution:   Add the "followwrap" item in 'diffopt'. (Rick Howe, closes #7797)

runtime/doc/diff.txt
runtime/doc/options.txt
src/diff.c
src/testdir/test_diffmode.vim
src/version.c

index 0b4edb927671dd66f9ca536d183550794db9b2d7..566411a1f7586c7feb98cbfea0d7083eb901d273 100644 (file)
@@ -59,7 +59,7 @@ In each of the edited files these options are set:
        '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 value:
        'scrollbind'    off
        'cursorbind'    off
        'scrollopt'     without "hor"
-       'wrap'          on
+       'wrap'          on, or leave as-is if 'diffopt' includes "followwrap"
        'foldmethod'    "manual"
        'foldcolumn'    0
 
index 74bab429c5bbd554331c315c227abf6351ef40d5..f25b1ba9771d7618108f883e9656bd2d37a5ad70 100644 (file)
@@ -2677,6 +2677,8 @@ A jump table for the options with a short description can be found at |Q_op|.
                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
index 753d089b66c542e9075aa0ccb348e4324373d689..0a0594cfefca043f5678c323d9c97f05f3485adc 100644 (file)
@@ -36,6 +36,7 @@ static int diff_need_update = FALSE; // ex_diffupdate needs to be called
 #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;
index 2d6228a442ccb91188545fbfbc2709c75585e7ab..d09d741498aa45c7bba523d97314b4aefb7718d2 100644 (file)
@@ -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'])
index 18f0b840fba0a8a94d16b0539b27360b24f2d414..382b923a9293dc4194e4f0d8cd8b840c9f7095f0 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2490,
 /**/
     2489,
 /**/