mirror of
https://github.com/neovim/neovim.git
synced 2024-12-22 04:05:09 -07:00
vim-patch:8.0.1817: a timer may change v:count unexpectedly
Problem: A timer may change v:count unexpectedly.
Solution: Save and restore v:count and similar variables when a timer
callback is invoked. (closes vim/vim#2897)
b0f42ba60d
This commit is contained in:
parent
234232ff4e
commit
4c4bcecc4a
@ -5,6 +5,7 @@ if !has('timers')
|
||||
endif
|
||||
|
||||
source shared.vim
|
||||
source screendump.vim
|
||||
source load.vim
|
||||
|
||||
func MyHandler(timer)
|
||||
@ -263,4 +264,35 @@ func Test_ex_mode()
|
||||
call timer_stop(timer)
|
||||
endfunc
|
||||
|
||||
func Test_restore_count()
|
||||
if !CanRunVimInTerminal()
|
||||
return
|
||||
endif
|
||||
" Check that v:count is saved and restored, not changed by a timer.
|
||||
call writefile([
|
||||
\ 'nnoremap <expr><silent> L v:count ? v:count . "l" : "l"',
|
||||
\ 'func Doit(id)',
|
||||
\ ' normal 3j',
|
||||
\ 'endfunc',
|
||||
\ 'call timer_start(100, "Doit")',
|
||||
\ ], 'Xtrcscript')
|
||||
call writefile([
|
||||
\ '1-1234',
|
||||
\ '2-1234',
|
||||
\ '3-1234',
|
||||
\ ], 'Xtrctext')
|
||||
let buf = RunVimInTerminal('-S Xtrcscript Xtrctext', {})
|
||||
|
||||
" Wait for the timer to move the cursor to the third line.
|
||||
call WaitForAssert({-> assert_equal(3, term_getcursor(buf)[0])})
|
||||
call assert_equal(1, term_getcursor(buf)[1])
|
||||
" Now check that v:count has not been set to 3
|
||||
call term_sendkeys(buf, 'L')
|
||||
call WaitForAssert({-> assert_equal(2, term_getcursor(buf)[1])})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xtrcscript')
|
||||
call delete('Xtrctext')
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
Loading…
Reference in New Issue
Block a user