changeset 18329:1784afa654c8 v8.1.2159

patch 8.1.2159: some mappings are listed twice Commit: https://github.com/vim/vim/commit/fafb4b18cd4aa5897537f53003b31bb83d7362df Author: Bram Moolenaar <Bram@vim.org> Date: Wed Oct 16 18:34:57 2019 +0200 patch 8.1.2159: some mappings are listed twice Problem: Some mappings are listed twice. Solution: Skip mappings duplicated for modifyOtherKeys. (closes https://github.com/vim/vim/issues/5064)
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Oct 2019 18:45:04 +0200
parents c96e311bfbf4
children 6f41e4d7a05a
files src/map.c src/testdir/test_mapping.vim src/version.c
diffstat 3 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/map.c
+++ b/src/map.c
@@ -554,7 +554,7 @@ do_map(
 		for ( ; mp != NULL && !got_int; mp = mp->m_next)
 		{
 		    // check entries with the same mode
-		    if ((mp->m_mode & mode) != 0)
+		    if (!mp->m_simplified && (mp->m_mode & mode) != 0)
 		    {
 			if (!haskey)		    // show all entries
 			{
@@ -599,15 +599,19 @@ do_map(
 		for (mp = *mpp; mp != NULL && !got_int; mp = *mpp)
 		{
 
-		    if (!(mp->m_mode & mode))   // skip entries with wrong mode
+		    if ((mp->m_mode & mode) == 0)
 		    {
+			// skip entries with wrong mode
 			mpp = &(mp->m_next);
 			continue;
 		    }
 		    if (!haskey)	// show all entries
 		    {
-			showmap(mp, map_table != maphash);
-			did_it = TRUE;
+			if (!mp->m_simplified)
+			{
+			    showmap(mp, map_table != maphash);
+			    did_it = TRUE;
+			}
 		    }
 		    else	// do we have a match?
 		    {
@@ -643,8 +647,11 @@ do_map(
 			    }
 			    else if (!hasarg)	// show matching entry
 			    {
-				showmap(mp, map_table != maphash);
-				did_it = TRUE;
+				if (!mp->m_simplified)
+				{
+				    showmap(mp, map_table != maphash);
+				    did_it = TRUE;
+				}
 			    }
 			    else if (n != len)	// new entry is ambiguous
 			    {
--- a/src/testdir/test_mapping.vim
+++ b/src/testdir/test_mapping.vim
@@ -442,3 +442,19 @@ func Test_error_in_map_expr()
   call delete('Xtest.vim')
   exe buf .. 'bwipe!'
 endfunc
+
+func Test_list_mappings()
+  inoremap <C-M> CtrlM
+  inoremap <A-S> AltS
+  inoremap <S-/> ShiftSlash
+  call assert_equal([
+	\ 'i  <S-/>       * ShiftSlash',
+	\ 'i  <M-S>       * AltS',
+	\ 'i  <C-M>       * CtrlM',
+	\], execute('imap')->trim()->split("\n"))
+  iunmap <C-M>
+  iunmap <A-S>
+  call assert_equal(['i  <S-/>       * ShiftSlash'], execute('imap')->trim()->split("\n"))
+  iunmap <S-/>
+  call assert_equal(['No mapping found'], execute('imap')->trim()->split("\n"))
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2159,
+/**/
     2158,
 /**/
     2157,