summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-05-20 21:19:57 +0000
committerBram Moolenaar <Bram@vim.org>2005-05-20 21:19:57 +0000
commit686f51ef8e2fea4b13150bfae39e1273ce0af4c0 (patch)
tree0875aadf6176cf6a0f633cceea0d9feecda0422c /src
parent555b280f28998668c2f2b22df63c5393cfa9a0dd (diff)
downloadvim-686f51ef8e2fea4b13150bfae39e1273ce0af4c0.zip
updated for version 7.0074
Diffstat (limited to 'src')
-rw-r--r--src/getchar.c29
-rw-r--r--src/message.c42
-rw-r--r--src/normal.c9
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