Mercurial > vim
diff src/getchar.c @ 275:fb70e333c94e
updated for version 7.0074
author | vimboss |
---|---|
date | Fri, 20 May 2005 21:19:57 +0000 |
parents | 723a01584c3e |
children | 86cd0a77d2ae |
line wrap: on
line diff
--- a/src/getchar.c +++ b/src/getchar.c @@ -4522,14 +4522,16 @@ check_map_keycodes() * NULL otherwise */ char_u * -check_map(keys, mode, exact) +check_map(keys, mode, exact, ign_mod) char_u *keys; int mode; int exact; /* require exact match */ + int ign_mod; /* ignore preceding modifier */ { int hash; int len, minlen; mapblock_T *mp; + char_u *s; #ifdef FEAT_LOCALMAP int local; #endif @@ -4553,14 +4555,23 @@ check_map(keys, mode, exact) { /* skip entries with wrong mode, wrong length and not matching * ones */ - if (mp->m_keylen < len) - minlen = mp->m_keylen; - else - minlen = len; - if ((mp->m_mode & mode) - && (!exact || mp->m_keylen == len) - && STRNCMP(mp->m_keys, keys, minlen) == 0) - return mp->m_str; + if ((mp->m_mode & mode) && (!exact || mp->m_keylen == len)) + { + if (len > mp->m_keylen) + minlen = mp->m_keylen; + else + minlen = len; + s = mp->m_keys; + if (ign_mod && s[0] == K_SPECIAL && s[1] == KS_MODIFIER + && s[2] != NUL) + { + s += 3; + if (len > mp->m_keylen - 3) + minlen = mp->m_keylen - 3; + } + if (STRNCMP(s, keys, minlen) == 0) + return mp->m_str; + } } }