diff options
author | Bram Moolenaar <Bram@vim.org> | 2005-05-20 21:19:57 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2005-05-20 21:19:57 +0000 |
commit | 686f51ef8e2fea4b13150bfae39e1273ce0af4c0 (patch) | |
tree | 0875aadf6176cf6a0f633cceea0d9feecda0422c /src | |
parent | 555b280f28998668c2f2b22df63c5393cfa9a0dd (diff) | |
download | vim-686f51ef8e2fea4b13150bfae39e1273ce0af4c0.zip |
updated for version 7.0074
Diffstat (limited to 'src')
-rw-r--r-- | src/getchar.c | 29 | ||||
-rw-r--r-- | src/message.c | 42 | ||||
-rw-r--r-- | src/normal.c | 9 |
3 files changed, 49 insertions, 31 deletions
diff --git a/src/getchar.c b/src/getchar.c index dea8c4919..2ece91aa2 100644 --- 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; + } } } diff --git a/src/message.c b/src/message.c index 7efe28ca4..7f9a22c2d 100644 --- a/src/message.c +++ b/src/message.c @@ -3785,18 +3785,18 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) if (!justify_left) { /* left padding with blank or zero */ - int n = min_field_width - (str_arg_l + number_of_zeros_to_pad); + int pn = min_field_width - (str_arg_l + number_of_zeros_to_pad); - if (n > 0) + if (pn > 0) { if (str_l < str_m) { size_t avail = str_m - str_l; vim_memset(str + str_l, zero_padding ? '0' : ' ', - n > avail ? avail : n); + (size_t)pn > avail ? avail : pn); } - str_l += n; + str_l += pn; } } @@ -3812,41 +3812,42 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { /* insert first part of numerics (sign or '0x') before zero * padding */ - int n = zero_padding_insertion_ind; + int zn = zero_padding_insertion_ind; - if (n > 0) + if (zn > 0) { if (str_l < str_m) { size_t avail = str_m - str_l; mch_memmove(str + str_l, str_arg, - n > avail ? avail : n); + (size_t)zn > avail ? avail : zn); } - str_l += n; + str_l += zn; } /* insert zero padding as requested by the precision or min * field width */ - n = number_of_zeros_to_pad; - if (n > 0) + zn = number_of_zeros_to_pad; + if (zn > 0) { if (str_l < str_m) { size_t avail = str_m-str_l; - vim_memset(str + str_l, '0', n > avail ? avail : n); + vim_memset(str + str_l, '0', + (size_t)zn > avail ? avail : zn); } - str_l += n; + str_l += zn; } } /* insert formatted string * (or as-is conversion specifier for unknown conversions) */ { - int n = str_arg_l - zero_padding_insertion_ind; + int sn = str_arg_l - zero_padding_insertion_ind; - if (n > 0) + if (sn > 0) { if (str_l < str_m) { @@ -3854,9 +3855,9 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) mch_memmove(str + str_l, str_arg + zero_padding_insertion_ind, - n > avail ? avail : n); + (size_t)sn > avail ? avail : sn); } - str_l += n; + str_l += sn; } } @@ -3864,17 +3865,18 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) if (justify_left) { /* right blank padding to the field width */ - int n = min_field_width - (str_arg_l + number_of_zeros_to_pad); + int pn = min_field_width - (str_arg_l + number_of_zeros_to_pad); - if (n > 0) + if (pn > 0) { if (str_l < str_m) { size_t avail = str_m - str_l; - vim_memset(str + str_l, ' ', n > avail ? avail : n); + vim_memset(str + str_l, ' ', + (size_t)pn > avail ? avail : pn); } - str_l += n; + str_l += pn; } } } diff --git a/src/normal.c b/src/normal.c index ec38db2fa..207576698 100644 --- a/src/normal.c +++ b/src/normal.c @@ -651,12 +651,17 @@ normal_cmd(oap, toplevel) buf[0] = c; buf[1] = NUL; # endif - /* Fake a "c"hange command. + /* Fake a "c"hange command. When "restart_edit" is set (e.g., because + * 'insertmode' is set) fake a "d"elete command, Insert mode will + * restart automatically. * Insert the typed character in the typeahead buffer, so that it will * be mapped in Insert mode. Required for ":lmap" to work. May cause * mapping a character from ":vnoremap"... */ (void)ins_typebuf(buf, REMAP_YES, 0, !KeyTyped, FALSE); - c = 'c'; + if (restart_edit != 0) + c = 'd'; + else + c = 'c'; } #endif |