]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1179 v7.3.1179
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Jun 2013 19:00:26 +0000 (21:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Jun 2013 19:00:26 +0000 (21:00 +0200)
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)

src/getchar.c
src/version.c

index 946e757d647797024b2933954b10588cf40017eb..e24a6abcf7e1f7dade4fcc61a369878ce92d383d 100644 (file)
@@ -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.
index 32a81cfe2564d6bfcf7676d3cce537bcc5cee753..e7f399b8062ecfe6c57ed6275183266d841f0a36 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1179,
 /**/
     1178,
 /**/