Patch 8.2.0812
Problem: mapset() does not properly handle <> notation.
Solution: Convert <> codes. (closes #6116)
Files: src/map.c, src/testdir/test_maparg.vim
*** ../vim-8.2.0811/src/map.c 2020-05-22 13:38:15.606498510 +0200
--- src/map.c 2020-05-22 19:47:17.196385407 +0200
***************
*** 2269,2274 ****
--- 2269,2276 ----
dict_T *d;
char_u *lhs;
char_u *rhs;
+ char_u *orig_rhs;
+ char_u *arg_buf = NULL;
int noremap;
int expr;
int silent;
***************
*** 2304,2309 ****
--- 2306,2314 ----
emsg(_("E99: rhs entry missing in mapset() dict argument"));
return;
}
+ orig_rhs = rhs;
+ rhs = replace_termcodes(rhs, &arg_buf,
+ REPTERM_DO_LT | REPTERM_SPECIAL, NULL);
noremap = dict_get_number(d, (char_u *)"noremap") ? REMAP_NONE: 0;
if (dict_get_number(d, (char_u *)"script") != 0)
***************
*** 2330,2338 ****
keys = replace_termcodes(lhs, &keys_buf,
REPTERM_FROM_PART | REPTERM_DO_LT, NULL);
! (void)map_add(map_table, abbr_table, keys, rhs, rhs, noremap,
nowait, silent, mode, is_abbr, expr, sid, lnum, simplified);
vim_free(keys_buf);
}
#endif
--- 2335,2344 ----
keys = replace_termcodes(lhs, &keys_buf,
REPTERM_FROM_PART | REPTERM_DO_LT, NULL);
! (void)map_add(map_table, abbr_table, keys, rhs, orig_rhs, noremap,
nowait, silent, mode, is_abbr, expr, sid, lnum, simplified);
vim_free(keys_buf);
+ vim_free(arg_buf);
}
#endif
*** ../vim-8.2.0811/src/testdir/test_maparg.vim 2020-05-22 13:09:55.320226061
+0200
--- src/testdir/test_maparg.vim 2020-05-22 20:00:19.320652928 +0200
***************
*** 6,12 ****
return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
endfunc
! funct Test_maparg()
new
set cpo-=<
set encoding=utf8
--- 6,12 ----
return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
endfunc
! func Test_maparg()
new
set cpo-=<
set encoding=utf8
***************
*** 156,161 ****
--- 156,228 ----
func Test_mapset()
call One_mapset_test('K')
call One_mapset_test('<F3>')
+
+ " Check <> key conversion
+ new
+ inoremap K one<Left>x
+ call feedkeys("iK\<Esc>", 'xt')
+ call assert_equal('onxe', getline(1))
+
+ let orig = maparg('K', 'i', 0, 1)
+ call assert_equal('K', orig.lhs)
+ call assert_equal('one<Left>x', orig.rhs)
+ call assert_equal('i', orig.mode)
+
+ iunmap K
+ let d = maparg('K', 'i', 0, 1)
+ call assert_equal({}, d)
+
+ call mapset('i', 0, orig)
+ call feedkeys("SK\<Esc>", 'xt')
+ call assert_equal('onxe', getline(1))
+
+ iunmap K
+
+ " Test literal <CR> using a backslash
+ let cpo_save = &cpo
+ set cpo-=B
+ inoremap K one\<CR>two
+ call feedkeys("SK\<Esc>", 'xt')
+ call assert_equal('one<CR>two', getline(1))
+
+ let orig = maparg('K', 'i', 0, 1)
+ call assert_equal('K', orig.lhs)
+ call assert_equal('one\<CR>two', orig.rhs)
+ call assert_equal('i', orig.mode)
+
+ iunmap K
+ let d = maparg('K', 'i', 0, 1)
+ call assert_equal({}, d)
+
+ call mapset('i', 0, orig)
+ call feedkeys("SK\<Esc>", 'xt')
+ call assert_equal('one<CR>two', getline(1))
+
+ iunmap K
+ let &cpo = cpo_save
+
+ " Test literal <CR> using CTRL-V
+ inoremap K one <CR>two
+ call feedkeys("SK\<Esc>", 'xt')
+ call assert_equal('one<CR>two', getline(1))
+
+ let orig = maparg('K', 'i', 0, 1)
+ call assert_equal('K', orig.lhs)
+ call assert_equal("one\x16<CR>two", orig.rhs)
+ call assert_equal('i', orig.mode)
+
+ iunmap K
+ let d = maparg('K', 'i', 0, 1)
+ call assert_equal({}, d)
+
+ call mapset('i', 0, orig)
+ call feedkeys("SK\<Esc>", 'xt')
+ call assert_equal('one<CR>two', getline(1))
+
+ iunmap K
+ let &cpo = cpo_save
+
+ bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0811/src/version.c 2020-05-22 14:44:23.301661908 +0200
--- src/version.c 2020-05-22 19:42:44.073770419 +0200
***************
*** 748,749 ****
--- 748,751 ----
{ /* Add new patch number below this line */
+ /**/
+ 812,
/**/
--
hundred-and-one symptoms of being an internet addict:
163. You go outside for the fresh air (at -30 degrees) but open the
window first to hear new mail arrive.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202005221801.04MI1l3D012016%40masaka.moolenaar.net.