Mercurial > vim
changeset 7117:9946e87686c8 v7.4.870
commit https://github.com/vim/vim/commit/2455c4ede8d4ff6f0754977b548708eec08869eb
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Sep 15 18:29:39 2015 +0200
patch 7.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)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 15 Sep 2015 18:30:04 +0200 |
parents | d8cbf271f0e8 |
children | b32e6e4f7aaf |
files | src/getchar.c src/version.c |
diffstat | 2 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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;