From 8d4ce56a19ed14d13332f94ad592fff2d9a715d5 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 30 Jan 2019 22:01:40 +0100 Subject: [PATCH] patch 8.1.0851: feedkeys() with "L" does not work properly Problem: feedkeys() with "L" does not work properly. Solution: Do not set typebuf_was_filled when using "L". (Ozaki Kiichi, closes #3885) --- src/evalfunc.c | 13 ++++++++----- src/testdir/test_autocmd.vim | 2 +- src/testdir/test_mapping.vim | 2 +- src/testdir/test_timers.vim | 5 ++--- src/version.c | 2 ++ 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/evalfunc.c b/src/evalfunc.c index c7ba6f308..374e70132 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -3705,15 +3705,18 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED) #endif } else + { ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE), insert ? 0 : typebuf.tb_len, !typed, FALSE); - vim_free(keys_esc); - if (vgetc_busy + if (vgetc_busy #ifdef FEAT_TIMERS - || timer_busy + || timer_busy #endif - ) - typebuf_was_filled = TRUE; + ) + typebuf_was_filled = TRUE; + } + vim_free(keys_esc); + if (execute) { int save_msg_scroll = msg_scroll; diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index c502a2617..9e8a02cb4 100644 --- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -50,7 +50,7 @@ if has('timers') au CursorHoldI * let g:triggered += 1 set updatetime=500 call job_start(has('win32') ? 'cmd /c echo:' : 'echo', - \ {'exit_cb': {j, s -> timer_start(1000, 'ExitInsertMode')}}) + \ {'exit_cb': {-> timer_start(1000, 'ExitInsertMode')}}) call feedkeys('a', 'x!') call assert_equal(1, g:triggered) unlet g:triggered diff --git a/src/testdir/test_mapping.vim b/src/testdir/test_mapping.vim index 921b693a9..c454fc01c 100644 --- a/src/testdir/test_mapping.vim +++ b/src/testdir/test_mapping.vim @@ -215,7 +215,7 @@ func Test_map_timeout_with_timer_interrupt() set timeout timeoutlen=1000 func ExitCb(job, status) - let g:timer = timer_start(1, {_ -> feedkeys("3\", 't')}) + let g:timer = timer_start(1, {-> feedkeys("3\", 't')}) endfunc call job_start([&shell, &shellcmdflag, 'echo'], {'exit_cb': 'ExitCb'}) diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim index 78ec00567..e900b1f5d 100644 --- a/src/testdir/test_timers.vim +++ b/src/testdir/test_timers.vim @@ -251,15 +251,14 @@ func Test_peek_and_get_char() endfunc func Test_getchar_zero() - if has('win32') + if has('win32') && !has('gui_running') " Console: no low-level input - " GUI: somehow doesn't work return endif " Measure the elapsed time to avoid a hang when it fails. let start = reltime() - let id = timer_start(20, {id -> feedkeys('x', 'L')}) + let id = timer_start(20, {-> feedkeys('x', 'L')}) let c = 0 while c == 0 && reltimefloat(reltime(start)) < 0.2 let c = getchar(0) diff --git a/src/version.c b/src/version.c index 31bfb9a02..1dc9ad006 100644 --- a/src/version.c +++ b/src/version.c @@ -783,6 +783,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 851, /**/ 850, /**/ -- 2.40.0