changeset 4865:d84833983de7 v7.3.1179

updated for version 7.3.1179 Problem: When a global mapping starts with the same characters as a buffer-local mapping Vim waits for a character to be typed to find out whether the global mapping is to be used. (Andy Wokula) Solution: Use the local mapping without waiting. (Michael Henry)
author Bram Moolenaar <bram@vim.org>
date Wed, 12 Jun 2013 21:00:26 +0200
parents 9595cfcf8d2d
children 17019850f49f
files src/getchar.c src/version.c
diffstat 2 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1924,6 +1924,7 @@ vgetorpeek(advance)
     mapblock_T	*mp;
 #ifdef FEAT_LOCALMAP
     mapblock_T	*mp2;
+    int		expecting_global_mappings;
 #endif
     mapblock_T	*mp_match;
     int		mp_match_len = 0;
@@ -2105,6 +2106,7 @@ vgetorpeek(advance)
 			/* First try buffer-local mappings. */
 			mp = curbuf->b_maphash[MAP_HASH(local_State, c1)];
 			mp2 = maphash[MAP_HASH(local_State, c1)];
+			expecting_global_mappings = (mp && mp2);
 			if (mp == NULL)
 			{
 			    mp = mp2;
@@ -2128,6 +2130,16 @@ vgetorpeek(advance)
 #endif
 				(mp = mp->m_next))
 			{
+#ifdef FEAT_LOCALMAP
+			    if (expecting_global_mappings && mp2 == NULL)
+			    {
+				/* This is the first global mapping. If we've
+				 * got a complete buffer-local match, use it. */
+				if (mp_match)
+				    break;
+				expecting_global_mappings = FALSE;
+			    }
+#endif
 			    /*
 			     * Only consider an entry if the first character
 			     * matches and it is for the current state.
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1179,
+/**/
     1178,
 /**/
     1177,