updated for version 7.0181
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 8aa8299..5de02e6 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Jan 13
+*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Jan 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,6 +30,9 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+When the file "" exists, then ":!ls aap<Tab>" should put backslashes before
+'&', ';', '<' and '>'.
+
 Evaluating CTRL-R = in the sandbox causes trouble (G. Sumner Hayes).  Can the
 rules for the commandline window be used?
 
@@ -67,7 +70,6 @@
     Can't reproduce it right now...
 
 spelling:
-- NL woordenlijst naar Adri sturen.
 - Include script to cleanup a .add file. (Antonio Colombo, Jan 9)
 - suggestions for "macARONI" doesn't include "macaroni", they are all allcap.
   suggestion for "KG" to "kg" when it's keepcase.
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 36345b4..00830d9 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Jan 13
+*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Jan 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1558,4 +1558,12 @@
 stopped at the region end match, making the region continue after that.
 Now check for the column being past the end of the line in syn_add_end_off().
 
+When changing a file, setting 'swapfile' off and then on again, making another
+change and killing Vim, then some blocks may be missing from the swapfile.
+When 'swapfile' is switched back on mark all blocks in the swapfile as dirty.
+Added mf_set_dirty().
+
+Expanding wildcards in a command like ":e aap;<>!" didn't work.  Put
+backslashes before characters that are special to the shell. (Adri Verhoef)
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/src/eval.c b/src/eval.c
index 4823593..c18b42d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -17667,7 +17667,18 @@
     }
 
     if (lv.ll_exp_name != NULL)
+    {
 	len = STRLEN(lv.ll_exp_name);
+	if (lead <= 2 && lv.ll_name == lv.ll_exp_name
+					 && STRNCMP(lv.ll_name, "s:", 2) == 0)
+	{
+	    /* When there was "s:" already or the name expanded to get a
+	     * leading "s:" then remove it. */
+	    lv.ll_name += 2;
+	    len -= 2;
+	    lead = 2;
+	}
+    }
     else
     {
 	if (lead == 2)	/* skip over "s:" */
diff --git a/src/memfile.c b/src/memfile.c
index e1a6b60..bac84fe 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -701,6 +701,23 @@
 }
 
 /*
+ * For all blocks in memory file *mfp that have a positive block number set
+ * the dirty flag.  These are blocks that need to be written to a newly
+ * created swapfile.
+ */
+    void
+mf_set_dirty(mfp)
+    memfile_T	*mfp;
+{
+    bhdr_T	*hp;
+
+    for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev)
+	if (hp->bh_bnum > 0)
+	    hp->bh_flags |= BH_DIRTY;
+    mfp->mf_dirty = TRUE;
+}
+
+/*
  * insert block *hp in front of hashlist of memfile *mfp
  */
     static void
diff --git a/src/memline.c b/src/memline.c
index 9abf155..c87a955 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -563,7 +563,13 @@
 
 	    /* Flush block zero, so others can read it */
 	    if (mf_sync(mfp, MFS_ZERO) == OK)
+	    {
+		/* Mark all blocks that should be in the swapfile as dirty.
+		 * Needed for when the 'swapfile' option was reset, so that
+		 * the swap file was deleted, and then on again. */
+		mf_set_dirty(mfp);
 		break;
+	    }
 	    /* Writing block 0 failed: close the file and try another dir */
 	    mf_close_file(buf, FALSE);
 	}