From 4223d43c0fb6ead1e611e4469a1680a9228b6015 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 10 Feb 2021 13:18:17 +0100 Subject: 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 #7797) --- src/diff.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/diff.c') diff --git a/src/diff.c b/src/diff.c index 753d089b66..0a0594cfef 100644 --- a/src/diff.c +++ b/src/diff.c @@ -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; -- cgit v1.2.3