diff options
author | Bram Moolenaar <Bram@vim.org> | 2008-07-22 16:58:47 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2008-07-22 16:58:47 +0000 |
commit | 01b9a406f076f899f20304bfac976628163e11ca (patch) | |
tree | 44da0ef0676cda114adda6a74bee13ffa0ae526e /src/getchar.c | |
parent | a1aed62928a213956a60d225f3f2a6209d8249c2 (diff) |
updated for version 7.2b-010v7.2b.010
Diffstat (limited to 'src/getchar.c')
-rw-r--r-- | src/getchar.c | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/src/getchar.c b/src/getchar.c index ec5ae87266..d4066c2124 100644 --- 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,16 +4618,45 @@ makemap(fd, buf) case OP_PENDING: c1 = 'o'; break; - case NORMAL + VISUAL + SELECTMODE: + case NORMAL + VISUAL: c1 = 'n'; - c2 = 'v'; + c2 = 'x'; break; - case VISUAL + SELECTMODE + OP_PENDING: + 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 NORMAL + OP_PENDING: + 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 CMDLINE + INSERT: @@ -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); } } |