changeset 26476:7426c2657710 v8.2.3768

patch 8.2.3768: timer_info() has the wrong repeat value in a timer callback Commit: https://github.com/vim/vim/commit/95b2dd0c008f0977ebb3cbe233a5064001a332e1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 9 18:42:57 2021 +0000 patch 8.2.3768: timer_info() has the wrong repeat value in a timer callback 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)
author Bram Moolenaar <Bram@vim.org>
date Thu, 09 Dec 2021 19:45:03 +0100
parents 9f535da74f6f
children cc6119fcc524
files src/testdir/test_timers.vim src/time.c src/version.c
diffstat 3 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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()
--- a/src/time.c
+++ b/src/time.c
@@ -696,7 +696,8 @@ add_timer_info(typval_T *rettv, timer_T 
     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");
--- 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,