]> granicus.if.org Git - vim/commitdiff
updated for version 7.0074
authorBram Moolenaar <Bram@vim.org>
Fri, 20 May 2005 21:19:57 +0000 (21:19 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 20 May 2005 21:19:57 +0000 (21:19 +0000)
src/getchar.c
src/message.c
src/normal.c

index dea8c4919e387ffd400cbb47457f7e8d040de3dd..2ece91aa2e8325a854e71105ec8db3d3e12d5f5e 100644 (file)
@@ -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;
+               }
            }
        }
 
index 7efe28ca4304702e674a6e1ae84cc359fd1d8c29..7f9a22c2d3286cd8f4415398d2573894de560893 100644 (file)
@@ -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;
                }
            }
        }
index ec38db2fa80ae0f38c92325bebcae7ea5ad2012a..207576698e76cfa1e0c2891adcf3e6665509f2be 100644 (file)
@@ -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