# nocov start
poll_progress <- function(futures, file, n_x) {
  symbol <- get_progress_symbol()
  prefix <- "Progress: "
  suffix <- " 100%"
  width_prefix <- nchar(prefix)
  width_suffix <- nchar(suffix)
  width_carriage <- 1L
  stderr <- stderr()
  while (any_running(futures)) {
    con <- file(file, open = "r")
    n_ticks <- get_n_ticks(con)
    close(con)
    # Console width might change while we poll
    width_max <- console_width()
    width_usable <- width_max - width_prefix - width_suffix - width_carriage
    width_rule <- floor(width_usable * n_ticks / n_x)
    width_space <- width_usable - width_rule
    space <- paste0(rep(" ", times = width_space), collapse = "")
    rule <- paste0(rep(symbol, times = width_rule), collapse = "")
    out <- paste0(prefix, rule, space, suffix)
    cat("\r", out, file = stderr)
    utils::flush.console()
  }
}
get_n_ticks <- function(con) {
  line <- readLines(con, n = 1L, warn = FALSE)
  if (length(line) == 0L) {
    line <- ""
  }
  nchar(line)
}
any_running <- function(futures) {
  !all(future::resolved(futures))
}
console_width <- function() {
  width <- Sys.getenv("RSTUDIO_CONSOLE_WIDTH", getOption("width", 80))
  as.integer(width)
}
# ------------------------------------------------------------------------------
# Adapted from cli's onload properties
# to dynamically switch depending on utf8 availability
get_progress_symbol <- function() {
  if (is_utf8_output()) {
    "\u2500"
  } else {
    "-"
  }
}
is_utf8_output <- function() {
  l10n_info()$`UTF-8` && !is_latex_output()
}
is_latex_output <- function() {
  if (!("knitr" %in% loadedNamespaces())) {
    return(FALSE)
  }
  get("is_latex_output", asNamespace("knitr"))()
}
# ------------------------------------------------------------------------------
assert_progress <- function(progress) {
  if (!is_bool(progress)) {
    abort("`.progress` must be a single logical value.")
  }
  invisible(progress)
}
# ------------------------------------------------------------------------------
# - Sequential blocks in the `future()` call, so no progress is ever shown
# - Cluster is generally used for multi-computer setups, and would end up
#   writing into files on the remote workers, which would never be shown.
progress_enabled_plans <- c(
  "multicore",
  "multisession",
  "multiprocess"
)
reconcile_progress_with_strategy <- function(progress) {
  if (is_false(progress)) {
    return(progress)
  }
  plan <- future::plan()
  progress_enabled_plan <- inherits_any(plan, progress_enabled_plans)
  if (!progress_enabled_plan) {
    progress <- FALSE
  }
  progress
}
# nocov end
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.