From 7d7691e85f2b6f74ffd7ab6394ebe27e4e07a031 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Mon, 15 Oct 2018 21:16:00 -0400 Subject: vim-patch:8.0.0670: can't use input() in a timer callback Problem: Can't use input() in a timer callback. (Cosmin Popescu) Solution: Reset vgetc_busy and set timer_busy. (Ozaki Kiichi, closes vim/vim#1790, closes vim/vim#1129) https://github.com/vim/vim/commit/1e8e14552e0cc8881411eb8fbe39a654dae42554 --- src/nvim/testdir/test_timers.vim | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim index 82afeb76c8..45e456b591 100644 --- a/src/nvim/testdir/test_timers.vim +++ b/src/nvim/testdir/test_timers.vim @@ -172,6 +172,23 @@ func Test_stop_all_in_callback() call assert_equal(0, len(info)) endfunc +func FeedkeysCb(timer) + call feedkeys("hello\", 'nt') +endfunc + +func InputCb(timer) + call timer_start(10, 'FeedkeysCb') + let g:val = input('?') + call Resume() +endfunc + +func Test_input_in_timer() + let g:val = '' + call timer_start(10, 'InputCb') + call Standby(1000) + call assert_equal('hello', g:val) +endfunc + func FeedAndPeek(timer) call test_feedinput('a') call getchar(1) -- cgit From 090008f3110fa48e7e09fefc950e60c384aff70d Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Tue, 16 Oct 2018 00:02:10 -0400 Subject: vim-patch:8.0.1067: try/catch in timer does not prevent it from being stopped Problem: Using try/catch in timer does not prevent it from being stopped. Solution: Reset the exception context and use did_emsg instead of called_emsg. https://github.com/vim/vim/commit/e723c42836d971180d1bf9f98916966c5543fff1 --- src/nvim/testdir/test_timers.vim | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim index 45e456b591..da61751bf4 100644 --- a/src/nvim/testdir/test_timers.vim +++ b/src/nvim/testdir/test_timers.vim @@ -189,6 +189,24 @@ func Test_input_in_timer() call assert_equal('hello', g:val) endfunc +func FuncWithCaughtError(timer) + let g:call_count += 1 + try + doesnotexist + catch + " nop + endtry +endfunc + +func Test_timer_catch_error() + let g:call_count = 0 + let timer = timer_start(10, 'FuncWithCaughtError', {'repeat': 4}) + " Timer will not be stopped. + call WaitFor('g:call_count == 4') + sleep 50m + call assert_equal(4, g:call_count) +endfunc + func FeedAndPeek(timer) call test_feedinput('a') call getchar(1) -- cgit