summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.3.032
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.032')
-rw-r--r--source/ap/vim/patches/7.3.032704
1 files changed, 704 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.032 b/source/ap/vim/patches/7.3.032
new file mode 100644
index 00000000..74647989
--- /dev/null
+++ b/source/ap/vim/patches/7.3.032
@@ -0,0 +1,704 @@
+To: vim-dev@vim.org
+Subject: Patch 7.3.032
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.032
+Problem: maparg() doesn't return the flags, such as <buffer>, <script>,
+ <silent>. These are needed to save and restore a mapping.
+Solution: Improve maparg(). (also by Christian Brabandt)
+Files: runtime/doc/eval.txt, src/eval.c, src/getchar.c, src/gui_w48.c, src/message.c, src/proto/getchar.pro, src/proto/message.pro, src/structs.h src/testdir/test75.in, src/testdir/test75.ok
+
+
+*** ../vim-7.3.031/runtime/doc/eval.txt 2010-10-20 19:17:43.000000000 +0200
+--- runtime/doc/eval.txt 2010-10-20 19:44:41.000000000 +0200
+***************
+*** 1827,1833 ****
+ log( {expr}) Float natural logarithm (base e) of {expr}
+ log10( {expr}) Float logarithm of Float {expr} to base 10
+ map( {expr}, {string}) List/Dict change each item in {expr} to {expr}
+! maparg( {name}[, {mode} [, {abbr}]])
+ String rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ String check for mappings matching {name}
+--- 1827,1833 ----
+ log( {expr}) Float natural logarithm (base e) of {expr}
+ log10( {expr}) Float logarithm of Float {expr} to base 10
+ map( {expr}, {string}) List/Dict change each item in {expr} to {expr}
+! maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+ String rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ String check for mappings matching {name}
+***************
+*** 3971,3993 ****
+ further items in {expr} are processed.
+
+
+! maparg({name}[, {mode} [, {abbr}]]) *maparg()*
+! Return the rhs of mapping {name} in mode {mode}. When there
+! is no mapping for {name}, an empty String is returned.
+ {mode} can be one of these strings:
+ "n" Normal
+! "v" Visual
+ "o" Operator-pending
+ "i" Insert
+ "c" Cmd-line
+ "l" langmap |language-mapping|
+ "" Normal, Visual and Operator-pending
+ When {mode} is omitted, the modes for "" are used.
+ When {abbr} is there and it is non-zero use abbreviations
+ instead of mappings.
+! The {name} can have special key names, like in the ":map"
+! command. The returned String has special characters
+! translated like in the output of the ":map" command listing.
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+ This function can be used to map a key even when it's already
+--- 3972,4022 ----
+ further items in {expr} are processed.
+
+
+! maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
+! When {dict} is omitted or zero: Return the rhs of mapping
+! {name} in mode {mode}. The returned String has special
+! characters translated like in the output of the ":map" command
+! listing.
+!
+! When there is no mapping for {name}, an empty String is
+! returned.
+!
+! The {name} can have special key names, like in the ":map"
+! command.
+!
+ {mode} can be one of these strings:
+ "n" Normal
+! "v" Visual (including Select)
+ "o" Operator-pending
+ "i" Insert
+ "c" Cmd-line
++ "s" Select
++ "x" Visual
+ "l" langmap |language-mapping|
+ "" Normal, Visual and Operator-pending
+ When {mode} is omitted, the modes for "" are used.
++
+ When {abbr} is there and it is non-zero use abbreviations
+ instead of mappings.
+!
+! When {dict} is there and it is non-zero return a dictionary
+! containing all the information of the mapping with the
+! following items:
+! "lhs" The {lhs} of the mapping.
+! "rhs" The {rhs} of the mapping as typed.
+! "silent" 1 for a |:map-silent| mapping, else 0.
+! "noremap" 1 if the {rhs} of the mapping is remappable.
+! "expr" 1 for an expression mapping (|:map-<expr>|).
+! "buffer" 1 for a buffer local mapping (|:map-local|).
+! "mode" Modes for which the mapping is defined. In
+! addition to the modes mentioned above, these
+! characters will be used:
+! " " Normal, Visual and Operator-pending
+! "!" Insert and Commandline mode
+! (|mapmpde-ic|)
+! "sid" the Script local ID, used for <sid> mappings
+! (|<SID>|)
+!
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+ This function can be used to map a key even when it's already
+*** ../vim-7.3.031/src/eval.c 2010-10-20 19:17:43.000000000 +0200
+--- src/eval.c 2010-10-20 21:15:55.000000000 +0200
+***************
+*** 7804,7810 ****
+ {"log10", 1, 1, f_log10},
+ #endif
+ {"map", 2, 2, f_map},
+! {"maparg", 1, 3, f_maparg},
+ {"mapcheck", 1, 3, f_mapcheck},
+ {"match", 2, 4, f_match},
+ {"matchadd", 2, 4, f_matchadd},
+--- 7804,7810 ----
+ {"log10", 1, 1, f_log10},
+ #endif
+ {"map", 2, 2, f_map},
+! {"maparg", 1, 4, f_maparg},
+ {"mapcheck", 1, 3, f_mapcheck},
+ {"match", 2, 4, f_match},
+ {"matchadd", 2, 4, f_matchadd},
+***************
+*** 13292,13299 ****
+ char_u *keys_buf = NULL;
+ char_u *rhs;
+ int mode;
+- garray_T ga;
+ int abbr = FALSE;
+
+ /* return empty string for failure */
+ rettv->v_type = VAR_STRING;
+--- 13292,13301 ----
+ char_u *keys_buf = NULL;
+ char_u *rhs;
+ int mode;
+ int abbr = FALSE;
++ int get_dict = FALSE;
++ mapblock_T *mp;
++ int buffer_local;
+
+ /* return empty string for failure */
+ rettv->v_type = VAR_STRING;
+***************
+*** 13307,13313 ****
+--- 13309,13319 ----
+ {
+ which = get_tv_string_buf_chk(&argvars[1], buf);
+ if (argvars[2].v_type != VAR_UNKNOWN)
++ {
+ abbr = get_tv_number(&argvars[2]);
++ if (argvars[3].v_type != VAR_UNKNOWN)
++ get_dict = get_tv_number(&argvars[3]);
++ }
+ }
+ else
+ which = (char_u *)"";
+***************
+*** 13317,13335 ****
+ mode = get_map_mode(&which, 0);
+
+ keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
+! rhs = check_map(keys, mode, exact, FALSE, abbr);
+ vim_free(keys_buf);
+- if (rhs != NULL)
+- {
+- ga_init(&ga);
+- ga.ga_itemsize = 1;
+- ga.ga_growsize = 40;
+
+! while (*rhs != NUL)
+! ga_concat(&ga, str2special(&rhs, FALSE));
+
+! ga_append(&ga, NUL);
+! rettv->vval.v_string = (char_u *)ga.ga_data;
+ }
+ }
+
+--- 13323,13356 ----
+ mode = get_map_mode(&which, 0);
+
+ keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
+! rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
+ vim_free(keys_buf);
+
+! if (!get_dict)
+! {
+! /* Return a string. */
+! if (rhs != NULL)
+! rettv->vval.v_string = str2special_save(rhs, FALSE);
+!
+! }
+! else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
+! {
+! /* Return a dictionary. */
+! char_u *lhs = str2special_save(mp->m_keys, TRUE);
+! char_u *mapmode = map_mode_to_chars(mp->m_mode);
+! dict_T *dict = rettv->vval.v_dict;
+!
+! dict_add_nr_str(dict, "lhs", 0L, lhs);
+! dict_add_nr_str(dict, "rhs", 0L, mp->m_orig_str);
+! dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
+! dict_add_nr_str(dict, "expr", mp->m_expr ? 1L : 0L, NULL);
+! dict_add_nr_str(dict, "silent", mp->m_silent ? 1L : 0L, NULL);
+! dict_add_nr_str(dict, "sid", (long)mp->m_script_ID, NULL);
+! dict_add_nr_str(dict, "buffer", (long)buffer_local, NULL);
+! dict_add_nr_str(dict, "mode", 0L, mapmode);
+
+! vim_free(lhs);
+! vim_free(mapmode);
+ }
+ }
+
+*** ../vim-7.3.031/src/getchar.c 2010-08-15 21:57:25.000000000 +0200
+--- src/getchar.c 2010-10-20 21:16:24.000000000 +0200
+***************
+*** 3168,3173 ****
+--- 3168,3174 ----
+ int expr = FALSE;
+ #endif
+ int noremap;
++ char_u *orig_rhs;
+
+ keys = arg;
+ map_table = maphash;
+***************
+*** 3266,3271 ****
+--- 3267,3273 ----
+ }
+ if (*p != NUL)
+ *p++ = NUL;
++
+ p = skipwhite(p);
+ rhs = p;
+ hasarg = (*rhs != NUL);
+***************
+*** 3290,3295 ****
+--- 3292,3298 ----
+ keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
+ if (hasarg)
+ {
++ orig_rhs = rhs;
+ if (STRICMP(rhs, "<nop>") == 0) /* "<Nop>" means nothing */
+ rhs = (char_u *)"";
+ else
+***************
+*** 3298,3304 ****
+
+ #ifdef FEAT_FKMAP
+ /*
+! * when in right-to-left mode and alternate keymap option set,
+ * reverse the character flow in the rhs in Farsi.
+ */
+ if (p_altkeymap && curwin->w_p_rl)
+--- 3301,3307 ----
+
+ #ifdef FEAT_FKMAP
+ /*
+! * When in right-to-left mode and alternate keymap option set,
+ * reverse the character flow in the rhs in Farsi.
+ */
+ if (p_altkeymap && curwin->w_p_rl)
+***************
+*** 3556,3561 ****
+--- 3559,3566 ----
+ }
+ vim_free(mp->m_str);
+ mp->m_str = newstr;
++ vim_free(mp->m_orig_str);
++ mp->m_orig_str = vim_strsave(orig_rhs);
+ mp->m_noremap = noremap;
+ mp->m_silent = silent;
+ mp->m_mode = mode;
+***************
+*** 3633,3642 ****
+--- 3638,3649 ----
+
+ mp->m_keys = vim_strsave(keys);
+ mp->m_str = vim_strsave(rhs);
++ mp->m_orig_str = vim_strsave(orig_rhs);
+ if (mp->m_keys == NULL || mp->m_str == NULL)
+ {
+ vim_free(mp->m_keys);
+ vim_free(mp->m_str);
++ vim_free(mp->m_orig_str);
+ vim_free(mp);
+ retval = 4; /* no mem */
+ goto theend;
+***************
+*** 3682,3687 ****
+--- 3689,3695 ----
+ mp = *mpp;
+ vim_free(mp->m_keys);
+ vim_free(mp->m_str);
++ vim_free(mp->m_orig_str);
+ *mpp = mp->m_next;
+ vim_free(mp);
+ }
+***************
+*** 3851,3862 ****
+ }
+ }
+
+ static void
+ showmap(mp, local)
+ mapblock_T *mp;
+ int local; /* TRUE for buffer-local map */
+ {
+! int len = 1;
+
+ if (msg_didout || msg_silent != 0)
+ {
+--- 3859,3915 ----
+ }
+ }
+
++ /*
++ * Return characters to represent the map mode in an allocated string.
++ * Returns NULL when out of memory.
++ */
++ char_u *
++ map_mode_to_chars(mode)
++ int mode;
++ {
++ garray_T mapmode;
++
++ ga_init2(&mapmode, 1, 7);
++
++ if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
++ ga_append(&mapmode, '!'); /* :map! */
++ else if (mode & INSERT)
++ ga_append(&mapmode, 'i'); /* :imap */
++ else if (mode & LANGMAP)
++ ga_append(&mapmode, 'l'); /* :lmap */
++ else if (mode & CMDLINE)
++ ga_append(&mapmode, 'c'); /* :cmap */
++ else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
++ == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
++ ga_append(&mapmode, ' '); /* :map */
++ else
++ {
++ if (mode & NORMAL)
++ ga_append(&mapmode, 'n'); /* :nmap */
++ if (mode & OP_PENDING)
++ ga_append(&mapmode, 'o'); /* :omap */
++ if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
++ ga_append(&mapmode, 'v'); /* :vmap */
++ else
++ {
++ if (mode & VISUAL)
++ ga_append(&mapmode, 'x'); /* :xmap */
++ if (mode & SELECTMODE)
++ ga_append(&mapmode, 's'); /* :smap */
++ }
++ }
++
++ ga_append(&mapmode, NUL);
++ return (char_u *)mapmode.ga_data;
++ }
++
+ static void
+ showmap(mp, local)
+ mapblock_T *mp;
+ int local; /* TRUE for buffer-local map */
+ {
+! int len = 1;
+! char_u *mapchars;
+
+ if (msg_didout || msg_silent != 0)
+ {
+***************
+*** 3864,3912 ****
+ if (got_int) /* 'q' typed at MORE prompt */
+ return;
+ }
+! if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+! msg_putchar('!'); /* :map! */
+! else if (mp->m_mode & INSERT)
+! msg_putchar('i'); /* :imap */
+! else if (mp->m_mode & LANGMAP)
+! msg_putchar('l'); /* :lmap */
+! else if (mp->m_mode & CMDLINE)
+! msg_putchar('c'); /* :cmap */
+! else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+! == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+! msg_putchar(' '); /* :map */
+! else
+ {
+! len = 0;
+! if (mp->m_mode & NORMAL)
+! {
+! msg_putchar('n'); /* :nmap */
+! ++len;
+! }
+! if (mp->m_mode & OP_PENDING)
+! {
+! msg_putchar('o'); /* :omap */
+! ++len;
+! }
+! if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+! {
+! msg_putchar('v'); /* :vmap */
+! ++len;
+! }
+! else
+! {
+! if (mp->m_mode & VISUAL)
+! {
+! msg_putchar('x'); /* :xmap */
+! ++len;
+! }
+! if (mp->m_mode & SELECTMODE)
+! {
+! msg_putchar('s'); /* :smap */
+! ++len;
+! }
+! }
+ }
+ while (++len <= 3)
+ msg_putchar(' ');
+
+--- 3917,3931 ----
+ if (got_int) /* 'q' typed at MORE prompt */
+ return;
+ }
+!
+! mapchars = map_mode_to_chars(mp->m_mode);
+! if (mapchars != NULL)
+ {
+! msg_puts(mapchars);
+! len = STRLEN(mapchars);
+! vim_free(mapchars);
+ }
++
+ while (++len <= 3)
+ msg_putchar(' ');
+
+***************
+*** 3931,3938 ****
+ msg_putchar(' ');
+
+ /* Use FALSE below if we only want things like <Up> to show up as such on
+! * the rhs, and not M-x etc, TRUE gets both -- webb
+! */
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+--- 3950,3956 ----
+ msg_putchar(' ');
+
+ /* Use FALSE below if we only want things like <Up> to show up as such on
+! * the rhs, and not M-x etc, TRUE gets both -- webb */
+ if (*mp->m_str == NUL)
+ msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+ else
+***************
+*** 4995,5013 ****
+ sourcing_name = save_name;
+ }
+
+! #ifdef FEAT_EVAL
+ /*
+! * Check the string "keys" against the lhs of all mappings
+! * Return pointer to rhs of mapping (mapblock->m_str)
+! * NULL otherwise
+ */
+ char_u *
+! check_map(keys, mode, exact, ign_mod, abbr)
+ char_u *keys;
+ int mode;
+ int exact; /* require exact match */
+ int ign_mod; /* ignore preceding modifier */
+ int abbr; /* do abbreviations */
+ {
+ int hash;
+ int len, minlen;
+--- 5013,5033 ----
+ sourcing_name = save_name;
+ }
+
+! #if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+! * Check the string "keys" against the lhs of all mappings.
+! * Return pointer to rhs of mapping (mapblock->m_str).
+! * NULL when no mapping found.
+ */
+ char_u *
+! check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
+ char_u *keys;
+ int mode;
+ int exact; /* require exact match */
+ int ign_mod; /* ignore preceding modifier */
+ int abbr; /* do abbreviations */
++ mapblock_T **mp_ptr; /* return: pointer to mapblock or NULL */
++ int *local_ptr; /* return: buffer-local mapping or NULL */
+ {
+ int hash;
+ int len, minlen;
+***************
+*** 5062,5068 ****
+--- 5082,5094 ----
+ minlen = mp->m_keylen - 3;
+ }
+ if (STRNCMP(s, keys, minlen) == 0)
++ {
++ if (mp_ptr != NULL)
++ *mp_ptr = mp;
++ if (local_ptr != NULL)
++ *local_ptr = local;
+ return mp->m_str;
++ }
+ }
+ }
+ }
+*** ../vim-7.3.031/src/gui_w48.c 2010-08-15 21:57:29.000000000 +0200
+--- src/gui_w48.c 2010-10-20 20:29:20.000000000 +0200
+***************
+*** 1810,1816 ****
+ * mapped we want to use the mapping instead. */
+ if (vk == VK_F10
+ && gui.menu_is_active
+! && check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+ break;
+ #endif
+ if (GetKeyState(VK_SHIFT) & 0x8000)
+--- 1810,1817 ----
+ * mapped we want to use the mapping instead. */
+ if (vk == VK_F10
+ && gui.menu_is_active
+! && check_map(k10, State, FALSE, TRUE, FALSE,
+! NULL, NULL) == NULL)
+ break;
+ #endif
+ if (GetKeyState(VK_SHIFT) & 0x8000)
+***************
+*** 1924,1930 ****
+ /* Check for <F10>: Default effect is to select the menu. When <F10> is
+ * mapped we need to stop it here to avoid strange effects (e.g., for the
+ * key-up event) */
+! if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+ #endif
+ DispatchMessage(&msg);
+ }
+--- 1925,1932 ----
+ /* Check for <F10>: Default effect is to select the menu. When <F10> is
+ * mapped we need to stop it here to avoid strange effects (e.g., for the
+ * key-up event) */
+! if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+! NULL, NULL) == NULL)
+ #endif
+ DispatchMessage(&msg);
+ }
+*** ../vim-7.3.031/src/message.c 2010-08-15 21:57:29.000000000 +0200
+--- src/message.c 2010-10-20 20:31:33.000000000 +0200
+***************
+*** 1477,1482 ****
+--- 1477,1503 ----
+ return retval;
+ }
+
++ #if defined(FEAT_EVAL) || defined(PROTO)
++ /*
++ * Return the lhs or rhs of a mapping, with the key codes turned into printable
++ * strings, in an allocated string.
++ */
++ char_u *
++ str2special_save(str, is_lhs)
++ char_u *str;
++ int is_lhs; /* TRUE for lhs, FALSE for rhs */
++ {
++ garray_T ga;
++ char_u *p = str;
++
++ ga_init2(&ga, 1, 40);
++ while (*p != NUL)
++ ga_concat(&ga, str2special(&p, is_lhs));
++ ga_append(&ga, NUL);
++ return (char_u *)ga.ga_data;
++ }
++ #endif
++
+ /*
+ * Return the printable string for the key codes at "*sp".
+ * Used for translating the lhs or rhs of a mapping to printable chars.
+*** ../vim-7.3.031/src/proto/getchar.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/getchar.pro 2010-10-20 21:06:01.000000000 +0200
+***************
+*** 51,56 ****
+--- 51,57 ----
+ int get_map_mode __ARGS((char_u **cmdp, int forceit));
+ void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
+ void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
++ char_u *map_mode_to_chars __ARGS((int mode));
+ int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
+ int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
+ char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
+***************
+*** 61,67 ****
+ int makemap __ARGS((FILE *fd, buf_T *buf));
+ int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
+ void check_map_keycodes __ARGS((void));
+! char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
+ void init_mappings __ARGS((void));
+ void add_map __ARGS((char_u *map, int mode));
+ /* vim: set ft=c : */
+--- 62,68 ----
+ int makemap __ARGS((FILE *fd, buf_T *buf));
+ int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
+ void check_map_keycodes __ARGS((void));
+! char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
+ void init_mappings __ARGS((void));
+ void add_map __ARGS((char_u *map, int mode));
+ /* vim: set ft=c : */
+*** ../vim-7.3.031/src/proto/message.pro 2010-08-15 21:57:28.000000000 +0200
+--- src/proto/message.pro 2010-10-20 20:31:25.000000000 +0200
+***************
+*** 33,38 ****
+--- 33,39 ----
+ int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
+ void msg_make __ARGS((char_u *arg));
+ int msg_outtrans_special __ARGS((char_u *strstart, int from));
++ char_u *str2special_save __ARGS((char_u *str, int is_lhs));
+ char_u *str2special __ARGS((char_u **sp, int from));
+ void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
+ void msg_prt_line __ARGS((char_u *s, int list));
+*** ../vim-7.3.031/src/structs.h 2010-08-15 21:57:28.000000000 +0200
+--- src/structs.h 2010-10-20 20:23:38.000000000 +0200
+***************
+*** 979,987 ****
+ struct mapblock
+ {
+ mapblock_T *m_next; /* next mapblock in list */
+! char_u *m_keys; /* mapped from */
+ int m_keylen; /* strlen(m_keys) */
+! char_u *m_str; /* mapped to */
+ int m_mode; /* valid mode */
+ int m_noremap; /* if non-zero no re-mapping for m_str */
+ char m_silent; /* <silent> used, don't echo commands */
+--- 979,988 ----
+ struct mapblock
+ {
+ mapblock_T *m_next; /* next mapblock in list */
+! char_u *m_keys; /* mapped from, lhs */
+ int m_keylen; /* strlen(m_keys) */
+! char_u *m_str; /* mapped to, rhs */
+! char_u *m_orig_str; /* rhs as entered by the user */
+ int m_mode; /* valid mode */
+ int m_noremap; /* if non-zero no re-mapping for m_str */
+ char m_silent; /* <silent> used, don't echo commands */
+*** ../vim-7.3.031/src/testdir/test75.in 2010-10-20 21:13:30.000000000 +0200
+--- src/testdir/test75.in 2010-10-20 20:54:04.000000000 +0200
+***************
+*** 0 ****
+--- 1,16 ----
++ " Tests for functions.
++
++ STARTTEST
++ :so small.vim
++ :" Test maparg() with a string result
++ :map foo<C-V> is<F4>foo
++ :vnoremap <script> <buffer> <expr> <silent> bar isbar
++ :call append('$', maparg('foo<C-V>'))
++ :call append('$', string(maparg('foo<C-V>', '', 0, 1)))
++ :call append('$', string(maparg('bar', '', 0, 1)))
++ :"
++ :/^eof/+1,$w! test.out
++ :qa!
++ ENDTEST
++
++ eof
+*** ../vim-7.3.031/src/testdir/test75.ok 2010-10-20 21:13:30.000000000 +0200
+--- src/testdir/test75.ok 2010-10-20 20:54:08.000000000 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ is<F4>foo
++ {'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
++ {'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
+*** ../vim-7.3.031/src/version.c 2010-10-20 19:17:43.000000000 +0200
+--- src/version.c 2010-10-20 21:13:18.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 32,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///