changeset 29085:ae39554ad2ee v8.2.5064

patch 8.2.5064: no test for what 8.1.0052 fixes Commit: https://github.com/vim/vim/commit/3760bfddc414e4d3e1c4203db8c22e293cf08d09 Author: zeertzjq <zeertzjq@outlook.com> Date: Mon Jun 6 16:22:46 2022 +0100 patch 8.2.5064: no test for what 8.1.0052 fixes Problem: No test for what 8.1.0052 fixes. Solution: Add a test. (closes https://github.com/vim/vim/issues/10531)
author Bram Moolenaar <Bram@vim.org>
date Mon, 06 Jun 2022 17:30:03 +0200
parents e97abb3ba4e2
children 7674e8558378
files src/getchar.c src/testdir/test_mapping.vim src/version.c
diffstat 3 files changed, 34 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -3458,8 +3458,8 @@ vgetorpeek(int advance)
  * get a character: 3. from the user - get it
  */
 		if (typebuf.tb_len == 0)
-		    // timedout may have been set while waiting for a mapping
-		    // that has a <Nop> RHS.
+		    // timedout may have been set if a mapping with empty RHS
+		    // fully matched while longer mappings timed out.
 		    timedout = FALSE;
 
 		if (advance)
--- a/src/testdir/test_mapping.vim
+++ b/src/testdir/test_mapping.vim
@@ -1685,4 +1685,34 @@ func Test_expr_map_escape_special()
   nunmap …
 endfunc
 
+" Testing for mapping after an <Nop> mapping is triggered on timeout.
+" Test for what patch 8.1.0052 fixes.
+func Test_map_after_timed_out_nop()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    set timeout timeoutlen=400
+    inoremap ab TEST
+    inoremap a <Nop>
+  END
+  call writefile(lines, 'Xtest_map_after_timed_out_nop')
+  let buf = RunVimInTerminal('-S Xtest_map_after_timed_out_nop', #{rows: 6})
+
+  " Enter Insert mode
+  call term_sendkeys(buf, 'i')
+  " Wait for the "a" mapping to timeout
+  call term_sendkeys(buf, 'a')
+  call term_wait(buf, 500)
+  " Send "a" and wait for a period shorter than 'timeoutlen'
+  call term_sendkeys(buf, 'a')
+  call term_wait(buf, 100)
+  " Send "b", should trigger the "ab" mapping
+  call term_sendkeys(buf, 'b')
+  call WaitForAssert({-> assert_equal("TEST", term_getline(buf, 1))})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('Xtest_map_after_timed_out_nop')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    5064,
+/**/
     5063,
 /**/
     5062,