diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-02-24 14:34:19 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-02-24 14:34:19 +0100 |
commit | f4d7f944baf3e6aaf8a17e9b6fae54e96d121be5 (patch) | |
tree | 0aef5f7b9ec4885df7d45d58c312236111752e0d /src | |
parent | 54c1b4965b6072352d84c41fb4101e8a2214cc6b (diff) | |
download | vim-git-f4d7f944baf3e6aaf8a17e9b6fae54e96d121be5.tar.gz |
updated for version 7.2.370v7.2.370
Problem: A redraw may cause folds to be closed.
Solution: Revert part of the previous patch. Add a test. (Lech Lorens)
Diffstat (limited to 'src')
-rw-r--r-- | src/diff.c | 35 | ||||
-rw-r--r-- | src/fold.c | 6 | ||||
-rw-r--r-- | src/option.c | 4 | ||||
-rw-r--r-- | src/testdir/test45.in | 2 | ||||
-rw-r--r-- | src/testdir/test45.ok | 1 | ||||
-rw-r--r-- | 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 +zOj: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 @@ -682,6 +682,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 370, +/**/ 369, /**/ 368, |