updated for version 7.2b-010
diff --git a/src/getchar.c b/src/getchar.c
index ec5ae87..d4066c2 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -4539,7 +4539,7 @@
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 @@
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 @@
case NORMAL:
c1 = 'n';
break;
- case VISUAL + SELECTMODE:
- c1 = 'v';
- break;
case VISUAL:
c1 = 'x';
break;
@@ -4617,18 +4618,47 @@
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 @@
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 @@
|| put_eol(fd) < 0)
return FAIL;
c1 = c2;
- c2 = NUL;
- }
- while (c1);
+ c2 = c3;
+ c3 = NUL;
+ } while (c1 != NUL);
}
}
diff --git a/src/version.c b/src/version.c
index d51c877..d44cd65 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 10,
+/**/
9,
/**/
8,