diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-09-15 18:29:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-09-15 18:29:39 +0200 |
commit | 2455c4ede8d4ff6f0754977b548708eec08869eb (patch) | |
tree | b7d7b05f47748ec495cbc739a2ed7378b5246722 /src/getchar.c | |
parent | 3b59755862f4604ded8155404a1fe4c84c606829 (diff) |
patch 7.4.870v7.4.870
Problem: May get into an invalid state when using getchar() in an
expression mapping.
Solution: Anticipate mod_mask to change. (idea by Yukihiro Nakadaira)
Diffstat (limited to 'src/getchar.c')
-rw-r--r-- | src/getchar.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/getchar.c b/src/getchar.c index 87588a93ac..f4ec991b09 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -1630,13 +1630,16 @@ vgetc() last_recorded_len = 0; for (;;) /* this is done twice if there are modifiers */ { + int did_inc = FALSE; + if (mod_mask) /* no mapping after modifier has been read */ { ++no_mapping; ++allow_keys; + did_inc = TRUE; /* mod_mask may change value */ } c = vgetorpeek(TRUE); - if (mod_mask) + if (did_inc) { --no_mapping; --allow_keys; |