diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index ceb82ef113ce903b67f1c3f284f62dad26076b66..7f4cf813b15685b50bbdaa75b0c55a36d16d03aa 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0.  Last change: 2006 Nov 01
+*eval.txt*      For Vim version 7.0.  Last change: 2007 Apr 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1623,6 +1623,7 @@ glob( {expr})			String	expand file wildcards in {expr}
 globpath( {path}, {expr})	String	do glob({expr}) for all dirs in {path}
 has( {feature})			Number	TRUE if feature {feature} supported
 has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
+haslocaldir()			Number	TRUE if current window executed |:lcd|
 hasmapto( {what} [, {mode} [, {abbr}]])
 				Number	TRUE if mapping to {what} exists
 histadd( {history},{item})	String	add an item to a history
@@ -3016,6 +3017,9 @@ has_key({dict}, {key})					*has_key()*
 		The result is a Number, which is 1 if |Dictionary| {dict} has
 		an entry with key {key}.  Zero otherwise.
 
+haslocaldir()						*haslocaldir()*
+		The result is a Number, which is 1 when the current
+                window has set a local path via |:lcd|, and 0 otherwise.
 
 hasmapto({what} [, {mode} [, {abbr}]])			*hasmapto()*
 		The result is a Number, which is 1 if there is a mapping that
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 4139ad89f0f81a2ddaade39e0eaaf1f557dcf1e4..652378d70d392f18a682c952146c37bc999205e8 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 7.0.  Last change: 2006 Apr 30
+*usr_41.txt*	For Vim version 7.0.  Last change: 2007 Apr 26
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -703,6 +703,7 @@ System functions and manipulation of files:
 	isdirectory()		check if a directory exists
 	getfsize()		get the size of a file
 	getcwd()		get the current working directory
+	haslocaldir()		check if current window used |:lcd|
 	tempname()		get the name of a temporary file
 	mkdir()			create a new directory
 	delete()		delete a file
diff --git a/src/eval.c b/src/eval.c
index d66fe57f40027ea5f606e262d3697d568549539d..7a5ca1d6005634d8edf8c9c3fc50f857b5535dfc 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -541,6 +541,7 @@ static void f_glob __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_globpath __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_has __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_has_key __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_haslocaldir __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_hasmapto __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_histadd __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_histdel __ARGS((typval_T *argvars, typval_T *rettv));
@@ -7110,6 +7111,7 @@ static struct fst
     {"globpath",	2, 2, f_globpath},
     {"has",		1, 1, f_has},
     {"has_key",		2, 2, f_has_key},
+    {"haslocaldir",	0, 0, f_haslocaldir},
     {"hasmapto",	1, 3, f_hasmapto},
     {"highlightID",	1, 1, f_hlID},		/* obsolete */
     {"highlight_exists",1, 1, f_hlexists},	/* obsolete */
@@ -11133,6 +11135,18 @@ f_has_key(argvars, rettv)
 				      get_tv_string(&argvars[1]), -1) != NULL;
 }
 
+/*
+ * "haslocaldir()" function
+ */
+/*ARGSUSED*/
+    static void
+f_haslocaldir(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = (curwin->w_localdir != NULL);
+}
+
 /*
  * "hasmapto()" function
  */
diff --git a/src/version.c b/src/version.c
index a825b38080fdc6f696a462c5a84eca95b15e67eb..672a409e06146615a161abaf15ad29b2bb7b7deb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    230,
 /**/
     229,
 /**/