changeset 1678:b60a569eb708 v7.2b.010

updated for version 7.2b-010
author vimboss
date Tue, 22 Jul 2008 16:58:47 +0000
parents b98975453785
children a881e15f44d8
files src/getchar.c src/version.c
diffstat 2 files changed, 44 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -4539,7 +4539,7 @@ makemap(fd, buf)
     buf_T	*buf;	    /* buffer for local mappings or NULL */
 {
     mapblock_T	*mp;
-    char_u	c1, c2;
+    char_u	c1, c2, c3;
     char_u	*p;
     char	*cmd;
     int		abbr;
@@ -4592,8 +4592,12 @@ makemap(fd, buf)
 		if (*p != NUL)
 		    continue;
 
+		/* It's possible to create a mapping and then ":unmap" certain
+		 * modes.  We recreate this here by mapping the individual
+		 * modes, which requires up to three of them. */
 		c1 = NUL;
 		c2 = NUL;
+		c3 = NUL;
 		if (abbr)
 		    cmd = "abbr";
 		else
@@ -4605,9 +4609,6 @@ makemap(fd, buf)
 		    case NORMAL:
 			c1 = 'n';
 			break;
-		    case VISUAL + SELECTMODE:
-			c1 = 'v';
-			break;
 		    case VISUAL:
 			c1 = 'x';
 			break;
@@ -4617,18 +4618,47 @@ makemap(fd, buf)
 		    case OP_PENDING:
 			c1 = 'o';
 			break;
+		    case NORMAL + VISUAL:
+			c1 = 'n';
+			c2 = 'x';
+			break;
+		    case NORMAL + SELECTMODE:
+			c1 = 'n';
+			c2 = 's';
+			break;
+		    case NORMAL + OP_PENDING:
+			c1 = 'n';
+			c2 = 'o';
+			break;
+		    case VISUAL + SELECTMODE:
+			c1 = 'v';
+			break;
+		    case VISUAL + OP_PENDING:
+			c1 = 'x';
+			c2 = 'o';
+			break;
+		    case SELECTMODE + OP_PENDING:
+			c1 = 's';
+			c2 = 'o';
+			break;
 		    case NORMAL + VISUAL + SELECTMODE:
 			c1 = 'n';
 			c2 = 'v';
 			break;
+		    case NORMAL + VISUAL + OP_PENDING:
+			c1 = 'n';
+			c2 = 'x';
+			c3 = 'o';
+			break;
+		    case NORMAL + SELECTMODE + OP_PENDING:
+			c1 = 'n';
+			c2 = 's';
+			c3 = 'o';
+			break;
 		    case VISUAL + SELECTMODE + OP_PENDING:
 			c1 = 'v';
 			c2 = 'o';
 			break;
-		    case NORMAL + OP_PENDING:
-			c1 = 'n';
-			c2 = 'o';
-			break;
 		    case CMDLINE + INSERT:
 			if (!abbr)
 			    cmd = "map!";
@@ -4646,7 +4676,7 @@ makemap(fd, buf)
 			EMSG(_("E228: makemap: Illegal mode"));
 			return FAIL;
 		}
-		do	/* may do this twice if c2 is set */
+		do	/* do this twice if c2 is set, 3 times with c3 */
 		{
 		    /* When outputting <> form, need to make sure that 'cpo'
 		     * is set to the Vim default. */
@@ -4693,9 +4723,9 @@ makemap(fd, buf)
 			    || put_eol(fd) < 0)
 			return FAIL;
 		    c1 = c2;
-		    c2 = NUL;
-		}
-		while (c1);
+		    c2 = c3;
+		    c3 = NUL;
+		} while (c1 != NUL);
 	    }
 	}
 
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    10,
+/**/
     9,
 /**/
     8,