From f4d7f944baf3e6aaf8a17e9b6fae54e96d121be5 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 24 Feb 2010 14:34:19 +0100 Subject: [PATCH] updated for version 7.2.370 Problem: A redraw may cause folds to be closed. Solution: Revert part of the previous patch. Add a test. (Lech Lorens) --- src/diff.c | 35 ++++++++++++++++++++--------------- src/fold.c | 6 ------ src/option.c | 4 ++++ src/testdir/test45.in | 2 ++ src/testdir/test45.ok | 1 + src/version.c | 2 ++ 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/diff.c b/src/diff.c index f5ea0c692..bf6254598 100644 --- a/src/diff.c +++ b/src/diff.c @@ -1117,26 +1117,31 @@ diff_win_options(wp, addbuf) win_T *wp; int addbuf; /* Add buffer to diff. */ { +# ifdef FEAT_FOLDING + win_T *old_curwin = curwin; + + /* close the manually opened folds */ + curwin = wp; + newFoldLevel(); + curwin = old_curwin; +# endif + wp->w_p_diff = TRUE; wp->w_p_scb = TRUE; wp->w_p_wrap = FALSE; # ifdef FEAT_FOLDING - { - win_T *old_curwin = curwin; - - curwin = wp; - curbuf = curwin->w_buffer; - set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff", + curwin = wp; + curbuf = curwin->w_buffer; + set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff", OPT_LOCAL|OPT_FREE, 0); - curwin = old_curwin; - curbuf = curwin->w_buffer; - wp->w_p_fdc = diff_foldcolumn; - wp->w_p_fen = TRUE; - wp->w_p_fdl = 0; - foldUpdateAll(wp); - /* make sure topline is not halfway a fold */ - changed_window_setting_win(wp); - } + curwin = old_curwin; + curbuf = curwin->w_buffer; + wp->w_p_fdc = diff_foldcolumn; + wp->w_p_fen = TRUE; + wp->w_p_fdl = 0; + foldUpdateAll(wp); + /* make sure topline is not halfway a fold */ + changed_window_setting_win(wp); # endif #ifdef FEAT_SCROLLBIND if (vim_strchr(p_sbo, 'h') == NULL) diff --git a/src/fold.c b/src/fold.c index ff1139dcb..a23a35c2a 100644 --- a/src/fold.c +++ b/src/fold.c @@ -854,12 +854,6 @@ foldUpdate(wp, top, bot) && fp->fd_top < bot) { fp->fd_small = MAYBE; - - /* Not sure if this is the right place to reset fd_flags (suggested by - * Lech Lorens). */ - if (wp->w_foldinvalid) - fp->fd_flags = FD_LEVEL; - ++fp; } diff --git a/src/option.c b/src/option.c index 99e94d5e0..ba17c1151 100644 --- a/src/option.c +++ b/src/option.c @@ -6586,7 +6586,11 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, || *curwin->w_p_fdm == NUL) errmsg = e_invarg; else + { foldUpdateAll(curwin); + if (foldmethodIsDiff(curwin)) + newFoldLevel(); + } } # ifdef FEAT_EVAL /* 'foldexpr' */ diff --git a/src/testdir/test45.in b/src/testdir/test45.in index 1dfad5454..e5af5073d 100644 --- a/src/testdir/test45.in +++ b/src/testdir/test45.in @@ -36,6 +36,8 @@ Gzk:call append("$", "folding " . getline(".")) k:call append("$", getline(".")) jAcommentstart Acommentend:set fdl=1 3j:call append("$", getline(".")) +:set fdl=0 +zO j:call append("$", getline(".")) :" test expression folding :fun Flvl() let l = getline(v:lnum) diff --git a/src/testdir/test45.ok b/src/testdir/test45.ok index 713cf882e..f04996e33 100644 --- a/src/testdir/test45.ok +++ b/src/testdir/test45.ok @@ -11,6 +11,7 @@ indent 2 folding 9 ii 3 cc 7 gg +8 hh expr 2 1 2 diff --git a/src/version.c b/src/version.c index cbdcf2e90..212e34d76 100644 --- a/src/version.c +++ b/src/version.c @@ -681,6 +681,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 370, /**/ 369, /**/ -- 2.50.1