changeset 3026:6018c815e120 v7.3.285

updated for version 7.3.285 Problem: Mapping <Char-123> no longer works. Solution: Properly check for "char-". Add a test for it.
author Bram Moolenaar <bram@vim.org>
date Fri, 19 Aug 2011 22:29:02 +0200
parents f33296ed67ea
children 7b50afd31037
files src/misc2.c src/testdir/test75.in src/testdir/test75.ok src/version.c
diffstat 4 files changed, 34 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -2781,6 +2781,12 @@ find_special_key(srcp, modp, keycode, ke
 	}
 	if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
 	    bp += 3;	/* skip t_xx, xx may be '-' or '>' */
+	else if (STRNICMP(bp, "char-", 5) == 0)
+	{
+	    vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
+	    bp += l + 5;
+	    break;
+	}
     }
 
     if (*bp == '>')	/* found matching '>' */
@@ -2810,27 +2816,27 @@ find_special_key(srcp, modp, keycode, ke
 	    {
 		/* <Char-123> or <Char-033> or <Char-0x33> */
 		vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
-		*modp = modifiers;
-		*srcp = end_of_name;
-		return (int)n;
+		key = (int)n;
 	    }
-
-	    /*
-	     * Modifier with single letter, or special key name.
-	     */
-#ifdef FEAT_MBYTE
-	    if (has_mbyte)
-		l = mb_ptr2len(last_dash + 1);
-	    else
-#endif
-		l = 1;
-	    if (modifiers != 0 && last_dash[l + 1] == '>')
-		key = PTR2CHAR(last_dash + 1);
 	    else
 	    {
-		key = get_special_key_code(last_dash + 1);
-		if (!keep_x_key)
-		    key = handle_x_keys(key);
+		/*
+		 * Modifier with single letter, or special key name.
+		 */
+#ifdef FEAT_MBYTE
+		if (has_mbyte)
+		    l = mb_ptr2len(last_dash + 1);
+		else
+#endif
+		    l = 1;
+		if (modifiers != 0 && last_dash[l + 1] == '>')
+		    key = PTR2CHAR(last_dash + 1);
+		else
+		{
+		    key = get_special_key_code(last_dash + 1);
+		    if (!keep_x_key)
+			key = handle_x_keys(key);
+		}
 	    }
 
 	    /*
--- a/src/testdir/test75.in
+++ b/src/testdir/test75.in
@@ -2,6 +2,7 @@
 
 STARTTEST
 :so small.vim
+:set cpo-=<
 :" Test maparg() with a string result
 :map foo<C-V> is<F4>foo
 :vnoremap <script> <buffer> <expr> <silent> bar isbar
@@ -9,6 +10,11 @@ STARTTEST
 :call append('$', string(maparg('foo<C-V>', '', 0, 1)))
 :call append('$', string(maparg('bar', '', 0, 1)))
 :"
+:map abc x<char-114>x
+:call append('$', maparg('abc'))
+:map abc y<S-char-114>y
+:call append('$', maparg('abc'))
+:"
 :/^eof/+1,$w! test.out
 :qa!
 ENDTEST
--- a/src/testdir/test75.ok
+++ b/src/testdir/test75.ok
@@ -1,3 +1,5 @@
 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}
+xrx
+yRy
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    285,
+/**/
     284,
 /**/
     283,