Create a spinner

make_spinner(
  which = NULL,
  stream = stderr(),
  template = "{spin}",
  static = c("dots", "print", "print_line", "silent")
)

Arguments

which

The name of the chosen spinner. The default depends on whether the platform supports Unicode.

stream

The stream to use for the spinner. Typically this is standard error, or maybe the standard output stream.

template

A template string, that will contain the spinner. The spinner itself will be substituted for {spin}. See example below.

static

What to do if the terminal does not support dynamic displays:

  • "dots": show a dot for each $spin() call.

  • "print": just print the frames of the spinner, one after another.

  • "print_line": print the frames of the spinner, each on its own line.

  • "silent" do not print anything, just the template.

Value

A cli_spinner object, which is a list of functions. See its methods below.

cli_spinner methods:

  • $spin(): output the next frame of the spinner.

  • $finish(): terminate the spinner. Depending on terminal capabilities this removes the spinner from the screen. Spinners can be reused, you can start calling the $spin() method again.

All methods return the spinner object itself, invisibly.

The spinner is automatically throttled to its ideal update frequency.

Examples

## Default spinner
sp1 <- make_spinner()
fun_with_spinner <- function() {
  lapply(1:100, function(x) { sp1$spin(); Sys.sleep(0.05) })
  sp1$finish()
}
ansi_with_hidden_cursor(fun_with_spinner())

## Spinner with a template
sp2 <- make_spinner(template = "Computing {spin}")
fun_with_spinner2 <- function() {
  lapply(1:100, function(x) { sp2$spin(); Sys.sleep(0.05) })
  sp2$finish()
}
ansi_with_hidden_cursor(fun_with_spinner2())

## Custom spinner
sp3 <- make_spinner("simpleDotsScrolling", template = "Downloading {spin}")
fun_with_spinner3 <- function() {
  lapply(1:100, function(x) { sp3$spin(); Sys.sleep(0.05) })
  sp2$finish()
}
ansi_with_hidden_cursor(fun_with_spinner3())

See also

Other spinners: demo_spinners(), get_spinner(), list_spinners()