diff --git a/src/progress-altrep.c b/src/progress-altrep.c index e4152b6d..f79fb910 100644 --- a/src/progress-altrep.c +++ b/src/progress-altrep.c @@ -123,7 +123,15 @@ int progress_along_Elt(SEXP x, R_xlen_t i) { Rf_defineVar(PROTECT(Rf_install("current")), PROTECT(ScalarReal((int) i)), bar); cli__current_progress_bar = bar; SEXP show_after = clic__find_var(bar, Rf_install("show_after")); - if (now > REAL(show_after)[0]) INTEGER(cli__disable_gc); + + SEXP last_shown = Rf_findVarInFrame(bar, Rf_install("last_shown")); + if (last_shown == R_UnboundValue) { + last_shown = Rf_ScalarReal(R_NegInf); + } + + if (now > REAL(show_after)[0] + REAL(last_shown)[0]) { + DATAPTR(cli__disable_gc); + } UNPROTECT(2); } return (int) (i + 1); diff --git a/tests/testthat/_snaps/progress-along.md b/tests/testthat/_snaps/progress-along.md index f8c362a1..245512d5 100644 --- a/tests/testthat/_snaps/progress-along.md +++ b/tests/testthat/_snaps/progress-along.md @@ -3,8 +3,7 @@ Code out Output - [1] "\rx: 10\033[K\r" "\rx: 10\033[K\r" "\rx: 10\033[K\r" "\rx: 10\033[K\r" - [5] "\r\033[K" + [1] "\rx: 10\033[K\r" "\rx: 10\033[K\r" "\r\033[K" # cli_progress_along