summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-09 18:42:57 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-09 18:42:57 +0000
commit95b2dd0c008f0977ebb3cbe233a5064001a332e1 (patch)
treed797d7d90ff2277f2f1cca2910e1b3c7d8d4e364
parente8a92b6166e32f8e583e01c9f541cf81cf76f8e6 (diff)
patch 8.2.3768: timer_info() has the wrong repeat value in a timer callbackv8.2.3768
Problem: timer_info() has the wrong repeat value in a timer callback. Solution: Do not add one to the repeat value when in the callback. (closes #9294)
-rw-r--r--src/testdir/test_timers.vim7
-rw-r--r--src/time.c3
-rw-r--r--src/version.c2
3 files changed, 11 insertions, 1 deletions
diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim
index 865a03b6d0..c833dd837f 100644
--- a/src/testdir/test_timers.vim
+++ b/src/testdir/test_timers.vim
@@ -117,6 +117,13 @@ func Test_timer_info()
call assert_equal([], timer_info(id))
call assert_fails('call timer_info("abc")', 'E39:')
+
+ " check repeat count inside the callback
+ let g:timer_repeat = []
+ let tid = timer_start(10, {tid -> execute("call add(g:timer_repeat, timer_info(tid)[0].repeat)")}, #{repeat: 3})
+ sleep 100m
+ call assert_equal([2, 1, 0], g:timer_repeat)
+ unlet g:timer_repeat
endfunc
func Test_timer_stopall()
diff --git a/src/time.c b/src/time.c
index 362fd46452..bb4a202829 100644
--- a/src/time.c
+++ b/src/time.c
@@ -696,7 +696,8 @@ add_timer_info(typval_T *rettv, timer_T *timer)
dict_add_number(dict, "remaining", (long)remaining);
dict_add_number(dict, "repeat",
- (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1));
+ (long)(timer->tr_repeat < 0 ? -1
+ : timer->tr_repeat + (timer->tr_firing ? 0 : 1)));
dict_add_number(dict, "paused", (long)(timer->tr_paused));
di = dictitem_alloc((char_u *)"callback");
diff --git a/src/version.c b/src/version.c
index c3e34e4a95..473b934430 100644
--- 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 */
/**/
+ 3768,
+/**/
3767,
/**/
3766,