Hi Bram!

On Do, 01 Apr 2010, Bram Moolenaar wrote:

> One remark: in the help, add a bit more information about when this would
> be needed, why the folds are not updated automatically.

Attached is an updated patch. Is this better?

regards,
Christian

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

To unsubscribe, reply using "remove me" as the subject.
From 62b32ea2cbc8ec8aba37dab994e2c63e84dfce0e Mon Sep 17 00:00:00 2001
From: Christian Brabandt <[email protected]>
Date: Wed, 31 Mar 2010 22:43:07 +0200
Subject: [PATCH] Added :foldupdate and normal zU

---
 runtime/doc/fold.txt |   10 ++++++++++
 src/ex_cmds.h        |    2 ++
 src/ex_docmd.c       |    9 +++++++++
 src/normal.c         |    6 ++++++
 4 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index 60704c5..e08cd43 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -344,6 +344,16 @@ za		When on a closed fold: open it.  When folds are nested, you
 zA		When on a closed fold: open it recursively.
 		When on an open fold: close it recursively and set
 		'foldenable'.
+							*zU*
+zU		Update folds and re-apply 'foldlevel'. This is usefull, to 
+		reevaluate a fold-expression. For example, if you change the
+		buffer and you want that the 'foldexpression' is reevaluated
+		to update your folds, this will do it.
+		
+
+
+:foldu[pdate]						*:foldupdate*
+		Force updating folds.  Works like "zU".
 
 							*zv*
 zv		View cursor line: Open just enough folds to make the line in
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index bf66b40..319028c 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -399,6 +399,8 @@ EX(CMD_folddoclosed,	"folddoclosed",	ex_folddo,
 			RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM),
 EX(CMD_foldopen,	"foldopen",	ex_foldopen,
 			RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN),
+EX(CMD_foldupdate,	"foldupdate",	ex_foldupdate,
+			TRLBAR),
 EX(CMD_for,		"for",		ex_while,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
 EX(CMD_function,	"function",	ex_function,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index f8795fa..1279451 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -423,10 +423,12 @@ static void	ex_X __ARGS((exarg_T *eap));
 static void	ex_fold __ARGS((exarg_T *eap));
 static void	ex_foldopen __ARGS((exarg_T *eap));
 static void	ex_folddo __ARGS((exarg_T *eap));
+static void     ex_foldupdate __ARGS(());
 #else
 # define ex_fold		ex_ni
 # define ex_foldopen		ex_ni
 # define ex_folddo		ex_ni
+# define ex_foldupdate          ex_ni
 #endif
 #if !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)))
@@ -11104,6 +11106,13 @@ ex_X(eap)
 
 #ifdef FEAT_FOLDING
     static void
+ex_foldupdate()
+{
+  curwin->w_foldinvalid = TRUE;
+  newFoldLevel(); 
+}
+
+    static void
 ex_fold(eap)
     exarg_T	*eap;
 {
diff --git a/src/normal.c b/src/normal.c
index 8b9fea7..6acfe5b 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4930,6 +4930,12 @@ dozet:
 		curwin->w_p_fen = TRUE;
 		break;
 
+		/* "zU": Update Folding, replay 'foldlevel' */
+    case 'U':	curwin->w_p_fen = TRUE;
+		curwin->w_foldinvalid = TRUE;
+		old_fdl = -1;		/* force an update */
+		break;
+
 		/* "zv": open folds at the cursor */
     case 'v':	foldOpenCursor();
 		break;
-- 
1.6.5.7

Raspunde prin e-mail lui