From 0a9cad8371fe96635b06e4bbe9204af87111643e Mon Sep 17 00:00:00 2001 From: Simon Couch Date: Mon, 18 May 2026 10:09:19 -0500 Subject: [PATCH 1/9] Add support for multi-line progress bars --- R/cliapp.R | 3 + R/internals.R | 8 +- R/status-bar.R | 188 +++++++++++++++++------ tests/testthat/_snaps/status-bar.md | 48 ++++++ tests/testthat/test-status-bar.R | 226 ++++++++++++++++++++++++++++ 5 files changed, 427 insertions(+), 46 deletions(-) create mode 100644 tests/testthat/_snaps/status-bar.md diff --git a/R/cliapp.R b/R/cliapp.R index e75b4fe1..633c5134 100644 --- a/R/cliapp.R +++ b/R/cliapp.R @@ -154,6 +154,9 @@ cliapp <- function( styles = NULL, delayed_item = NULL, status_bar = list(), + status_bar_lines = 0L, + status_bar_current = NULL, + status_bar_prev_content = "", margin = 0, output = NULL, diff --git a/R/internals.R b/R/internals.R index d13dd709..4dd8fa27 100644 --- a/R/internals.R +++ b/R/internals.R @@ -88,11 +88,11 @@ clii__cat_ln <- function(app, lines, indent, padding) { signal <- !identical(app$signal, FALSE) if (signal && length(app$status_bar)) { - clii__clear_status_bar(app) + clii__clear_all_status_bars(app) } app$cat(paste0(paste0(lines, "\n"), collapse = "")) if (signal && length(app$status_bar)) { - app$cat(paste0(app$status_bar[[1]]$content, "\r")) + clii__restore_status_bars(app) } } @@ -101,7 +101,7 @@ clii__vspace <- function(app, n) { sp <- strrep("\n", n - app$margin) signal <- !identical(app$signal, FALSE) if (signal && length(app$status_bar)) { - clii__clear_status_bar(app) + clii__clear_all_status_bars(app) } clii__message( sp, @@ -111,7 +111,7 @@ clii__vspace <- function(app, n) { ) app$margin <- n if (signal && length(app$status_bar)) { - app$cat(paste0(app$status_bar[[1]]$content, "\r")) + clii__restore_status_bars(app) } } } diff --git a/R/status-bar.R b/R/status-bar.R index 00164ca7..0d7f2752 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -333,6 +333,7 @@ clii_status <- function( keep = keep, auto_result = auto_result ) + app$status_bar_current <- id if (isTRUE(getOption("cli.hide_cursor", TRUE)) && !isTRUE(globalenv)) { ansi_hide_cursor(app$output) } @@ -340,9 +341,9 @@ clii_status <- function( } clii_status_clear <- function(app, id, result, msg_done, msg_failed) { - ## If NA then the most recent one + ## If NA then the current one if (is.na(id)) { - id <- names(app$status_bar)[1] + id <- app$status_bar_current } ## If no active status bar, then ignore @@ -362,6 +363,10 @@ clii_status_clear <- function(app, id, result, msg_done, msg_failed) { } } + ## For done/failed, update content via clii_status_update (renders). + ## Save and restore status_bar_current so that clearing a non-current bar + ## doesn't shift which bar subsequent id-less operations target. + saved_current <- app$status_bar_current if (result == "done") { msg <- msg_done %||% app$status_bar[[id]]$msg_done clii_status_update(app, id, msg, NULL, NULL) @@ -371,47 +376,64 @@ clii_status_clear <- function(app, id, result, msg_done, msg_failed) { clii_status_update(app, id, msg, NULL, NULL) app$status_bar[[id]]$keep <- TRUE } + app$status_bar_current <- saved_current - if (names(app$status_bar)[1] == id) { - ## This is the active one + output <- get_real_output(app$output) + is_ansi <- is_ansi_tty(output) + is_displayed <- if (is_ansi) TRUE else identical(app$status_bar_current, id) + + ## Clear/emit based on terminal type + if (is_ansi && length(app$status_bar) > 1L) { + ## Multi-bar ANSI: clear all, emit kept content, re-render remaining + clii__clear_all_status_bars(app) if (app$status_bar[[id]]$keep) { - ## Keep? Just emit it - app$cat("\n") - } else { - ## Not keep? Remove it - clii__clear_status_bar(app) - } - if (isTRUE(getOption("cli.hide_cursor", TRUE))) { - ansi_show_cursor(app$output) + app$cat(paste0(app$status_bar[[id]]$content, "\n")) } - } else { + } else if (is_displayed) { if (app$status_bar[[id]]$keep) { - ## Keep? - clii__clear_status_bar(app) - app$cat(paste0(app$status_bar[[id]]$content, "\n")) - app$cat(paste0(app$status_bar[[1]]$content, "\r")) + app$cat("\n") } else { - ## Not keep? Nothing to output + clii__clear_all_status_bars(app) } + } else if (app$status_bar[[id]]$keep) { + clii__clear_all_status_bars(app) + app$cat(paste0(app$status_bar[[id]]$content, "\n")) } - ## Remove + ## Remove the bar app$status_bar[[id]] <- NULL - ## Switch to the previous one - if (length(app$status_bar)) { - app$cat(paste0(app$status_bar[[1]]$content, "\r")) + ## Update current pointer + if (identical(app$status_bar_current, id)) { + nms <- names(app$status_bar) + app$status_bar_current <- if (length(nms)) nms[length(nms)] else NULL + } + + ## Cursor visibility and restore remaining bars + if (length(app$status_bar) == 0L) { + app$status_bar_lines <- 0L + app$status_bar_prev_content <- "" + if (isTRUE(getOption("cli.hide_cursor", TRUE))) { + ansi_show_cursor(app$output) + } + } else if (is_ansi) { + clii__render_all_status_bars(app) + } else { + if (is_displayed && isTRUE(getOption("cli.hide_cursor", TRUE))) { + ansi_show_cursor(app$output) + } + clii__restore_status_bars(app) } } clii_status_update <- function(app, id, msg, msg_done, msg_failed) { - ## If NA then the most recent one + ## If NA then the current one if (is.na(id)) { - id <- names(app$status_bar)[1] + id <- app$status_bar_current } ## If no active status bar, then ignore - if (is.na(id)) { + if (is.null(id) || is.na(id)) { return(invisible()) } @@ -428,9 +450,6 @@ clii_status_update <- function(app, id, msg, msg_done, msg_failed) { return(invisible()) } - ## Do we need to clear the current content? - current <- paste0("", app$status_bar[[1]]$content) - ## Format the line content <- "" fmsg <- app$inline(msg) @@ -440,22 +459,22 @@ clii_status_update <- function(app, id, msg, msg_done, msg_failed) { content <- "" } - ## Update status bar, put it in front + ## Update content in place (stable order) app$status_bar[[id]]$content <- content - app$status_bar <- c( - app$status_bar[id], - app$status_bar[setdiff(names(app$status_bar), id)] - ) + app$status_bar_current <- id - ## New content, if it is an ANSI terminal we'll overwrite and clear - ## until the end of the line. Otherwise we add some space characters - ## to the content to make sure we clear up residual content. + ## Render output <- get_real_output(app$output) if (is_ansi_tty(output)) { - app$cat(paste0("\r", content, ANSI_EL, "\r")) + clii__render_all_status_bars(app) } else if (is_dynamic_tty(output)) { - nsp <- max(ansi_nchar(current) - ansi_nchar(content), 0) - app$cat(paste0("\r", content, strrep(" ", nsp), "\r")) + ## Non-ANSI dynamic TTY: show only the current bar + current_content <- app$status_bar[[id]]$content + prev <- app$status_bar_prev_content %||% "" + nsp <- max(ansi_nchar(prev) - ansi_nchar(current_content), 0) + app$cat(paste0("\r", current_content, strrep(" ", nsp), "\r")) + app$status_bar_prev_content <- current_content + app$status_bar_lines <- 1L } else { app$cat(paste0(content, "\n")) } @@ -466,13 +485,98 @@ clii_status_update <- function(app, id, msg, msg_done, msg_failed) { invisible() } -clii__clear_status_bar <- function(app) { +clii__clear_all_status_bars <- function(app) { + n <- app$status_bar_lines + if (n == 0L) return(invisible()) + output <- get_real_output(app$output) if (is_ansi_tty(output)) { - app$cat(paste0("\r", ANSI_EL)) + out <- "" + if (n > 1L) { + out <- paste0("\033[", n - 1L, "A") + } + for (i in seq_len(n)) { + if (i < n) { + out <- paste0(out, "\r", ANSI_EL, "\n") + } else { + out <- paste0(out, "\r", ANSI_EL) + } + } + if (n > 1L) { + out <- paste0(out, "\033[", n - 1L, "A") + } + app$cat(out) } else if (is_dynamic_tty(output)) { - text <- app$status_bar[[1]]$content + text <- app$status_bar_prev_content %||% "" len <- ansi_nchar(text, type = "width") app$cat(paste0("\r", strrep(" ", len + rstudio_r_fix), "\r")) } + app$status_bar_lines <- 0L + app$status_bar_prev_content <- "" +} + +clii__render_all_status_bars <- function(app) { + n <- length(app$status_bar) + if (n == 0L) return(invisible()) + + output <- get_real_output(app$output) + if (!is_ansi_tty(output)) return(invisible()) + + prev <- app$status_bar_lines + out <- "" + + ## Move up to the top of previously painted area + if (prev > 1L) { + out <- paste0("\033[", prev - 1L, "A") + } + + ## Render each bar + for (i in seq_len(n)) { + content <- app$status_bar[[i]]$content + if (i < n) { + out <- paste0(out, "\r", content, ANSI_EL, "\n") + } else { + out <- paste0(out, "\r", content, ANSI_EL, "\r") + } + } + + ## If we previously had more lines, clear the leftover lines below + if (prev > n) { + for (i in seq_len(prev - n)) { + out <- paste0(out, "\n\r", ANSI_EL) + } + out <- paste0(out, "\033[", prev - n, "A\r") + } + + app$cat(out) + app$status_bar_lines <- n +} + +clii__restore_status_bars <- function(app) { + if (length(app$status_bar) == 0L) return(invisible()) + + output <- get_real_output(app$output) + if (is_ansi_tty(output)) { + if (length(app$status_bar) == 1L) { + content <- app$status_bar[[1]]$content + app$cat(paste0(content, "\r")) + app$status_bar_lines <- 1L + } else { + clii__render_all_status_bars(app) + } + } else if (is_dynamic_tty(output)) { + cid <- app$status_bar_current + if (!is.null(cid) && cid %in% names(app$status_bar)) { + content <- app$status_bar[[cid]]$content + } else { + content <- app$status_bar[[length(app$status_bar)]]$content + } + app$cat(paste0(content, "\r")) + app$status_bar_prev_content <- content + app$status_bar_lines <- 1L + } +} + +clii__clear_status_bar <- function(app) { + clii__clear_all_status_bars(app) } diff --git a/tests/testthat/_snaps/status-bar.md b/tests/testthat/_snaps/status-bar.md new file mode 100644 index 00000000..1ceff059 --- /dev/null +++ b/tests/testthat/_snaps/status-bar.md @@ -0,0 +1,48 @@ +# concurrent progress bars on ANSI terminal + + Code + msgs + Output + [1] "\rbar1: 1\033[K\r" + [2] "\rbar1: 1\033[K\n\rbar2: 1\033[K\r" + [3] "\033[1A\rbar1: 2\033[K\n\rbar2: 1\033[K\r" + [4] "\033[1A\r\033[K\n\r\033[K\033[1A" + [5] "\rbar2: 1\033[K\r" + [6] "\r\033[K" + +# bar completion while others remain (ANSI) + + Code + msgs + Output + [1] "\rfirst: 1\033[K\r" + [2] "\rfirst: 1\033[K\n\rsecond: 1\033[K\r" + [3] "\033[1A\r\033[K\n\r\033[K\033[1A" + [4] "\rsecond: 1\033[K\r" + [5] "\r\033[K" + +# interleaved cli output with multiple active bars (ANSI) + + Code + msgs + Output + [1] "\rdl: 1\033[K\r" + [2] "\rdl: 1\033[K\n\rproc: 1\033[K\r" + [3] "\033[1A\r\033[K\n\r\033[K\033[1A" + [4] "i checkpoint\n" + [5] "\rdl: 1\033[K\n\rproc: 1\033[K\r" + [6] "\033[1A\rdl: 2\033[K\n\rproc: 1\033[K\r" + [7] "\033[1A\r\033[K\n\r\033[K\033[1A" + [8] "\rproc: 1\033[K\r" + [9] "\r\033[K" + +# multi-bar keep/done on ANSI + + Code + msgs + Output + [1] "\ra: 1\033[K\r" "\ra: 1\033[K\n\rb: 1\033[K\r" + [3] "\033[1A\ra: 2\033[K\n\rb: 1\033[K\r" "\033[1A\r\033[K\n\r\033[K\033[1A" + [5] "a: 2\n" "\rb: 1\033[K\r" + [7] "\rb: 2\033[K\r" "\n" + diff --git a/tests/testthat/test-status-bar.R b/tests/testthat/test-status-bar.R index 0602bf58..458d20b0 100644 --- a/tests/testthat/test-status-bar.R +++ b/tests/testthat/test-status-bar.R @@ -380,3 +380,229 @@ test_that("auto-close with done or failure", { ) ) }) + +# ---- multi-line progress bars ---- + +test_that("concurrent progress bars on ANSI terminal", { + skip_if_not_installed("testthat", "3.1.2") + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = TRUE, + cli.progress_show_after = 0 + ) + + fun <- function() { + id1 <- cli_progress_bar( + "bar1", total = 3, type = "custom", + format = "bar1: {pb_current}", current = FALSE + ) + id2 <- cli_progress_bar( + "bar2", total = 3, type = "custom", + format = "bar2: {pb_current}", current = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_progress_update(id = id1, force = TRUE) + cli_progress_done(id = id1) + cli_progress_done(id = id2) + } + + msgs <- capture_cli_messages(fun()) + expect_snapshot(msgs) +}) + +test_that("bar completion while others remain (ANSI)", { + skip_if_not_installed("testthat", "3.1.2") + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = TRUE, + cli.progress_show_after = 0, + cli.progress_clear = TRUE + ) + + fun <- function() { + id1 <- cli_progress_bar( + type = "custom", format = "first: {pb_current}", + total = 2, current = FALSE, clear = TRUE + ) + id2 <- cli_progress_bar( + type = "custom", format = "second: {pb_current}", + total = 2, current = FALSE, clear = TRUE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_progress_done(id = id1) + cli_progress_update(id = id2, force = TRUE) + cli_progress_done(id = id2) + } + + msgs <- capture_cli_messages(fun()) + expect_snapshot(msgs) +}) + +test_that("interleaved cli output with multiple active bars (ANSI)", { + skip_if_not_installed("testthat", "3.1.2") + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = TRUE, + cli.progress_show_after = 0 + ) + + fun <- function() { + id1 <- cli_progress_bar( + type = "custom", format = "dl: {pb_current}", + total = 3, current = FALSE + ) + id2 <- cli_progress_bar( + type = "custom", format = "proc: {pb_current}", + total = 3, current = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_alert_info("checkpoint") + cli_progress_update(id = id1, force = TRUE) + cli_progress_done(id = id1) + cli_progress_done(id = id2) + } + + msgs <- capture_cli_messages(fun()) + expect_snapshot(msgs) +}) + +test_that("non-ANSI dynamic fallback shows single bar", { + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = FALSE, + cli.progress_show_after = 0 + ) + + fun <- function() { + id1 <- cli_progress_bar( + type = "custom", format = "bar1: {pb_current}", + total = 2, current = FALSE + ) + id2 <- cli_progress_bar( + type = "custom", format = "bar2: {pb_current}", + total = 2, current = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_progress_done(id = id1) + cli_progress_done(id = id2) + } + + out <- ansi_strip(capt0(fun())) + expect_match(out, "bar1: 1", fixed = TRUE) + expect_match(out, "bar2: 1", fixed = TRUE) +}) + +test_that("non-dynamic output preserves newline-per-update", { + withr::local_options( + cli.dynamic = FALSE, + cli.ansi = FALSE, + cli.progress_show_after = 0 + ) + + fun <- function() { + id1 <- cli_progress_bar( + type = "custom", format = "bar1: {pb_current}", + total = 2, current = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_done(id = id1) + } + + out <- ansi_strip(capt0(fun())) + expect_match(out, "bar1: 1\n", fixed = TRUE) +}) + +test_that("cli_status multiple bars regression", { + withr::local_options(cli.ansi = FALSE, cli.dynamic = TRUE) + + f <- function() { + sb1 <- cli_status("status1") + cli_text("text1") + sb2 <- cli_status("status2") + cli_text("text2") + cli_status_clear(sb2) + cli_text("text3") + } + out <- ansi_strip(capt0(f())) + expect_equal( + out, + paste0( + "\rstatus1\r", + "\r \rtext1\nstatus1\r", + "\rstatus2\r", + "\r \rtext2\nstatus2\r", + "\r \rstatus1\r", + "\r \rtext3\nstatus1\r", + "\r \r" + ) + ) +}) + +test_that("cli_process_start/done regression", { + withr::local_options(cli.ansi = FALSE, cli.dynamic = TRUE) + + f <- function() { + cli_process_start("working") + cli_process_done() + } + out <- ansi_strip(capt0(f())) + expect_match(out, "working", fixed = TRUE) + expect_match(out, "done", fixed = TRUE) +}) + +test_that("auto-close with .keep regression", { + withr::local_options(cli.ansi = FALSE, cli.dynamic = TRUE) + + f <- function() { + cli_status("kept status", .keep = TRUE) + cli_status_clear() + } + out <- ansi_strip(capt0(f())) + expect_equal(out, "\rkept status\r\n") +}) + +test_that("clearing non-current bar preserves current id", { + withr::local_options(cli.ansi = FALSE, cli.dynamic = TRUE) + + f <- function() { + sb1 <- cli_status("first") + sb2 <- cli_status("second") + sb3 <- cli_status("third") + cli_status_clear(sb2, result = "done") + cli_status_update(msg = "third-updated") + } + out <- ansi_strip(capt0(f())) + expect_match(out, "third-updated", fixed = TRUE) + expect_match(out, "second ... done", fixed = TRUE) +}) + +test_that("multi-bar keep/done on ANSI", { + skip_if_not_installed("testthat", "3.1.2") + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = TRUE, + cli.progress_show_after = 0 + ) + + fun <- function() { + id1 <- cli_progress_bar( + type = "custom", format = "a: {pb_current}", + total = 2, current = FALSE, clear = FALSE + ) + id2 <- cli_progress_bar( + type = "custom", format = "b: {pb_current}", + total = 2, current = FALSE, clear = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_progress_update(id = id1, set = 2, force = TRUE) + cli_progress_update(id = id2, set = 2, force = TRUE) + } + + msgs <- capture_cli_messages(fun()) + expect_snapshot(msgs) +}) From 04ed79766c63bf8bfbcf09a68b532c37b6996679 Mon Sep 17 00:00:00 2001 From: Simon Couch Date: Tue, 19 May 2026 13:10:58 -0500 Subject: [PATCH 2/9] Remove dead code --- R/status-bar.R | 4 ---- 1 file changed, 4 deletions(-) diff --git a/R/status-bar.R b/R/status-bar.R index 0d7f2752..233fa0db 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -576,7 +576,3 @@ clii__restore_status_bars <- function(app) { app$status_bar_lines <- 1L } } - -clii__clear_status_bar <- function(app) { - clii__clear_all_status_bars(app) -} From 299f9465a2678bdd324bb2767bfb4a0a2e0c689c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 10:51:07 +0200 Subject: [PATCH 3/9] Refactor: ansi_cuu() for readability --- R/status-bar.R | 8 ++++---- R/tty.R | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/R/status-bar.R b/R/status-bar.R index 233fa0db..89dab7a4 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -493,7 +493,7 @@ clii__clear_all_status_bars <- function(app) { if (is_ansi_tty(output)) { out <- "" if (n > 1L) { - out <- paste0("\033[", n - 1L, "A") + out <- ansi_cuu(n - 1L) } for (i in seq_len(n)) { if (i < n) { @@ -503,7 +503,7 @@ clii__clear_all_status_bars <- function(app) { } } if (n > 1L) { - out <- paste0(out, "\033[", n - 1L, "A") + out <- paste0(out, ansi_cuu(n - 1L)) } app$cat(out) } else if (is_dynamic_tty(output)) { @@ -527,7 +527,7 @@ clii__render_all_status_bars <- function(app) { ## Move up to the top of previously painted area if (prev > 1L) { - out <- paste0("\033[", prev - 1L, "A") + out <- ansi_cuu(prev - 1L) } ## Render each bar @@ -545,7 +545,7 @@ clii__render_all_status_bars <- function(app) { for (i in seq_len(prev - n)) { out <- paste0(out, "\n\r", ANSI_EL) } - out <- paste0(out, "\033[", prev - n, "A\r") + out <- paste0(out, ansi_cuu(prev - n), "\r") } app$cat(out) diff --git a/R/tty.R b/R/tty.R index c9ad97cb..8f2b61a7 100644 --- a/R/tty.R +++ b/R/tty.R @@ -156,6 +156,7 @@ ANSI_ESC <- "\u001B[" ANSI_HIDE_CURSOR <- paste0(ANSI_ESC, "?25l") ANSI_SHOW_CURSOR <- paste0(ANSI_ESC, "?25h") ANSI_EL <- paste0(ANSI_ESC, "K") +ansi_cuu <- function(n) paste0(ANSI_ESC, n, "A") #' Detect if a stream support ANSI escape characters #' From ebf8ed0b3dbc99ab36957e104ebc255604403259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 10:52:14 +0200 Subject: [PATCH 4/9] Reformat code --- R/status-bar.R | 16 +++++-- tests/testthat/test-status-bar.R | 72 ++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 26 deletions(-) diff --git a/R/status-bar.R b/R/status-bar.R index 89dab7a4..242952d9 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -487,7 +487,9 @@ clii_status_update <- function(app, id, msg, msg_done, msg_failed) { clii__clear_all_status_bars <- function(app) { n <- app$status_bar_lines - if (n == 0L) return(invisible()) + if (n == 0L) { + return(invisible()) + } output <- get_real_output(app$output) if (is_ansi_tty(output)) { @@ -517,10 +519,14 @@ clii__clear_all_status_bars <- function(app) { clii__render_all_status_bars <- function(app) { n <- length(app$status_bar) - if (n == 0L) return(invisible()) + if (n == 0L) { + return(invisible()) + } output <- get_real_output(app$output) - if (!is_ansi_tty(output)) return(invisible()) + if (!is_ansi_tty(output)) { + return(invisible()) + } prev <- app$status_bar_lines out <- "" @@ -553,7 +559,9 @@ clii__render_all_status_bars <- function(app) { } clii__restore_status_bars <- function(app) { - if (length(app$status_bar) == 0L) return(invisible()) + if (length(app$status_bar) == 0L) { + return(invisible()) + } output <- get_real_output(app$output) if (is_ansi_tty(output)) { diff --git a/tests/testthat/test-status-bar.R b/tests/testthat/test-status-bar.R index 458d20b0..44b9c9b9 100644 --- a/tests/testthat/test-status-bar.R +++ b/tests/testthat/test-status-bar.R @@ -393,12 +393,18 @@ test_that("concurrent progress bars on ANSI terminal", { fun <- function() { id1 <- cli_progress_bar( - "bar1", total = 3, type = "custom", - format = "bar1: {pb_current}", current = FALSE + "bar1", + total = 3, + type = "custom", + format = "bar1: {pb_current}", + current = FALSE ) id2 <- cli_progress_bar( - "bar2", total = 3, type = "custom", - format = "bar2: {pb_current}", current = FALSE + "bar2", + total = 3, + type = "custom", + format = "bar2: {pb_current}", + current = FALSE ) cli_progress_update(id = id1, force = TRUE) cli_progress_update(id = id2, force = TRUE) @@ -422,12 +428,18 @@ test_that("bar completion while others remain (ANSI)", { fun <- function() { id1 <- cli_progress_bar( - type = "custom", format = "first: {pb_current}", - total = 2, current = FALSE, clear = TRUE + type = "custom", + format = "first: {pb_current}", + total = 2, + current = FALSE, + clear = TRUE ) id2 <- cli_progress_bar( - type = "custom", format = "second: {pb_current}", - total = 2, current = FALSE, clear = TRUE + type = "custom", + format = "second: {pb_current}", + total = 2, + current = FALSE, + clear = TRUE ) cli_progress_update(id = id1, force = TRUE) cli_progress_update(id = id2, force = TRUE) @@ -450,12 +462,16 @@ test_that("interleaved cli output with multiple active bars (ANSI)", { fun <- function() { id1 <- cli_progress_bar( - type = "custom", format = "dl: {pb_current}", - total = 3, current = FALSE + type = "custom", + format = "dl: {pb_current}", + total = 3, + current = FALSE ) id2 <- cli_progress_bar( - type = "custom", format = "proc: {pb_current}", - total = 3, current = FALSE + type = "custom", + format = "proc: {pb_current}", + total = 3, + current = FALSE ) cli_progress_update(id = id1, force = TRUE) cli_progress_update(id = id2, force = TRUE) @@ -478,12 +494,16 @@ test_that("non-ANSI dynamic fallback shows single bar", { fun <- function() { id1 <- cli_progress_bar( - type = "custom", format = "bar1: {pb_current}", - total = 2, current = FALSE + type = "custom", + format = "bar1: {pb_current}", + total = 2, + current = FALSE ) id2 <- cli_progress_bar( - type = "custom", format = "bar2: {pb_current}", - total = 2, current = FALSE + type = "custom", + format = "bar2: {pb_current}", + total = 2, + current = FALSE ) cli_progress_update(id = id1, force = TRUE) cli_progress_update(id = id2, force = TRUE) @@ -505,8 +525,10 @@ test_that("non-dynamic output preserves newline-per-update", { fun <- function() { id1 <- cli_progress_bar( - type = "custom", format = "bar1: {pb_current}", - total = 2, current = FALSE + type = "custom", + format = "bar1: {pb_current}", + total = 2, + current = FALSE ) cli_progress_update(id = id1, force = TRUE) cli_progress_done(id = id1) @@ -590,12 +612,18 @@ test_that("multi-bar keep/done on ANSI", { fun <- function() { id1 <- cli_progress_bar( - type = "custom", format = "a: {pb_current}", - total = 2, current = FALSE, clear = FALSE + type = "custom", + format = "a: {pb_current}", + total = 2, + current = FALSE, + clear = FALSE ) id2 <- cli_progress_bar( - type = "custom", format = "b: {pb_current}", - total = 2, current = FALSE, clear = FALSE + type = "custom", + format = "b: {pb_current}", + total = 2, + current = FALSE, + clear = FALSE ) cli_progress_update(id = id1, force = TRUE) cli_progress_update(id = id2, force = TRUE) From a9c503e7ac1cb27c00f81ccb6e096a64e9e32457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 11:04:11 +0200 Subject: [PATCH 5/9] Comment --- R/status-bar.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/status-bar.R b/R/status-bar.R index 242952d9..17acf3ad 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -509,6 +509,10 @@ clii__clear_all_status_bars <- function(app) { } app$cat(out) } else if (is_dynamic_tty(output)) { + ## status_bar_prev_content tracks the painted width in the non-ANSI + ## dynamic branch (the ANSI path uses status_bar[[i]]$content directly). + ## Reset it unconditionally below in case the terminal mode flipped + ## between paint and clear. text <- app$status_bar_prev_content %||% "" len <- ansi_nchar(text, type = "width") app$cat(paste0("\r", strrep(" ", len + rstudio_r_fix), "\r")) From 6267cb38760e29fde268bc89639aa65daa84a643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 11:06:15 +0200 Subject: [PATCH 6/9] Add NEWS for multi-line status/progress bars --- NEWS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS.md b/NEWS.md index 2a00fd24..3b7de8b1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,9 @@ # cli (development version) +* Multiple concurrent progress bar and status bars are now rendered + on separate lines on ANSI-capable terminals. Non-ANSI dynamic terminals + continue to show only the current bar (@simonpcouch, #819). + # cli 3.6.6 * New `{.num}` and `{.bytes}` inline styles to format numbers From cc838d7dba70da0cdbe7ff7a32a46397ac937a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 13:12:34 +0200 Subject: [PATCH 7/9] Upgrade to roxygen2 8.0.0 --- DESCRIPTION | 2 +- man/ansi-styles.Rd | 8 ++-- man/ansi_align.Rd | 20 +++++----- man/ansi_columns.Rd | 20 +++++----- man/ansi_grep.Rd | 8 ++-- man/ansi_has_any.Rd | 10 ++--- man/ansi_hide_cursor.Rd | 16 ++++---- man/ansi_html.Rd | 4 +- man/ansi_html_style.Rd | 4 +- man/ansi_nchar.Rd | 20 +++++----- man/ansi_nzchar.Rd | 8 ++-- man/ansi_palettes.Rd | 1 - man/ansi_regex.Rd | 10 ++--- man/ansi_string.Rd | 10 ++--- man/ansi_strip.Rd | 10 ++--- man/ansi_strsplit.Rd | 20 +++++----- man/ansi_strtrim.Rd | 20 +++++----- man/ansi_strwrap.Rd | 20 +++++----- man/ansi_substr.Rd | 20 +++++----- man/ansi_substring.Rd | 22 +++++----- man/ansi_toupper.Rd | 42 +++++-------------- man/ansi_trimws.Rd | 20 +++++----- man/cli-package.Rd | 5 +++ man/cli_abort.Rd | 48 +++++++++++----------- man/cli_alert.Rd | 44 ++++++++++---------- man/cli_blockquote.Rd | 44 ++++++++++---------- man/cli_bullets.Rd | 44 ++++++++++---------- man/cli_bullets_raw.Rd | 44 ++++++++++---------- man/cli_dl.Rd | 44 ++++++++++---------- man/cli_h1.Rd | 44 ++++++++++---------- man/cli_li.Rd | 44 ++++++++++---------- man/cli_ol.Rd | 44 ++++++++++---------- man/cli_process_start.Rd | 54 ++++++++++++------------- man/cli_progress_along.Rd | 60 ++++++++++++++-------------- man/cli_progress_bar.Rd | 60 ++++++++++++++-------------- man/cli_progress_builtin_handlers.Rd | 16 ++++---- man/cli_progress_message.Rd | 60 ++++++++++++++-------------- man/cli_progress_output.Rd | 60 ++++++++++++++-------------- man/cli_progress_step.Rd | 60 ++++++++++++++-------------- man/cli_progress_styles.Rd | 16 ++++---- man/cli_rule.Rd | 44 ++++++++++---------- man/cli_status.Rd | 52 ++++++++++++------------ man/cli_status_clear.Rd | 8 ++-- man/cli_status_update.Rd | 52 ++++++++++++------------ man/cli_text.Rd | 44 ++++++++++---------- man/cli_ul.Rd | 44 ++++++++++---------- man/code_highlight.Rd | 4 +- man/code_theme_list.Rd | 4 +- man/combine_ansi_styles.Rd | 6 +-- man/demo_spinners.Rd | 8 ++-- man/diff_chr.Rd | 4 +- man/diff_str.Rd | 4 +- man/format_error.Rd | 44 ++++++++++---------- man/format_inline.Rd | 44 ++++++++++---------- man/get_spinner.Rd | 8 ++-- man/has_keypress_support.Rd | 4 +- man/hash_animal.Rd | 12 +++--- man/hash_emoji.Rd | 12 +++--- man/hash_md5.Rd | 12 +++--- man/hash_sha1.Rd | 12 +++--- man/hash_sha256.Rd | 12 +++--- man/hash_xxhash.Rd | 12 +++--- man/is_ansi_tty.Rd | 6 +-- man/is_dynamic_tty.Rd | 6 +-- man/keypress.Rd | 4 +- man/links.Rd | 2 +- man/list_spinners.Rd | 8 ++-- man/make_ansi_style.Rd | 6 +-- man/make_spinner.Rd | 8 ++-- man/num_ansi_colors.Rd | 6 +-- man/pluralization-helpers.Rd | 4 +- man/pluralization.Rd | 6 +-- man/pluralize.Rd | 4 +- man/pretty_print_code.Rd | 2 +- man/progress-utils.Rd | 16 ++++---- man/progress-variables.Rd | 18 ++++----- man/utf8_graphemes.Rd | 6 +-- man/utf8_nchar.Rd | 6 +-- man/utf8_substr.Rd | 6 +-- man/vt_output.Rd | 2 +- 80 files changed, 825 insertions(+), 843 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68325386..652d0fc0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -60,4 +60,4 @@ Config/Needs/website: Config/testthat/edition: 3 Config/usethis/last-upkeep: 2025-04-25 Encoding: UTF-8 -RoxygenNote: 7.3.2.9000 +Config/roxygen2/version: 8.0.0 diff --git a/man/ansi-styles.Rd b/man/ansi-styles.Rd index 52dbc31f..3d39ba88 100644 --- a/man/ansi-styles.Rd +++ b/man/ansi-styles.Rd @@ -265,9 +265,9 @@ style_italic(col_red(paste( ))) } \seealso{ -Other ANSI styling: -\code{\link{combine_ansi_styles}()}, -\code{\link{make_ansi_style}()}, -\code{\link{num_ansi_colors}()} +Other ANSI styling: +\code{\link[=combine_ansi_styles]{combine_ansi_styles()}}, +\code{\link[=make_ansi_style]{make_ansi_style()}}, +\code{\link[=num_ansi_colors]{num_ansi_colors()}} } \concept{ANSI styling} diff --git a/man/ansi_align.Rd b/man/ansi_align.Rd index 17a71687..33c79e5b 100644 --- a/man/ansi_align.Rd +++ b/man/ansi_align.Rd @@ -81,15 +81,15 @@ boxx(astr) }} } \seealso{ -Other ANSI string operations: -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_columns.Rd b/man/ansi_columns.Rd index dd9b1235..a3dadbb2 100644 --- a/man/ansi_columns.Rd +++ b/man/ansi_columns.Rd @@ -66,15 +66,15 @@ boxx(fmt, padding = c(0,1,0,1), header = col_cyan("Columns")) }} } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_grep.Rd b/man/ansi_grep.Rd index 78d7227b..63d381ed 100644 --- a/man/ansi_grep.Rd +++ b/man/ansi_grep.Rd @@ -3,7 +3,7 @@ \name{ansi_grep} \alias{ansi_grep} \alias{ansi_grepl} -\title{Like \code{\link[base:grep]{base::grep()}} and \code{\link[base:grep]{base::grepl()}}, but for ANSI strings} +\title{Like \code{\link[base:grep]{base::grep()}} and \code{\link[base:grepl]{base::grepl()}}, but for ANSI strings} \usage{ ansi_grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, ...) @@ -19,10 +19,10 @@ using \code{\link[=as.character]{as.character()}}.} \item{ignore.case, perl, value}{Passed to \code{\link[base:grep]{base::grep()}}.} -\item{...}{Extra arguments are passed to \code{\link[base:grep]{base::grep()}} or \code{\link[base:grep]{base::grepl()}}.} +\item{...}{Extra arguments are passed to \code{\link[base:grep]{base::grep()}} or \code{\link[base:grepl]{base::grepl()}}.} } \value{ -The same as \code{\link[base:grep]{base::grep()}} and \code{\link[base:grep]{base::grepl()}}, respectively. +The same as \code{\link[base:grep]{base::grep()}} and \code{\link[base:grepl]{base::grepl()}}, respectively. } \description{ First ANSI sequences will be stripped with \code{\link[=ansi_strip]{ansi_strip()}}, both @@ -31,7 +31,7 @@ First ANSI sequences will be stripped with \code{\link[=ansi_strip]{ansi_strip() Note that these functions work on code points (or bytes if \code{useBytes = TRUE}), and not graphemes. -Unlike \code{\link[base:grep]{base::grep()}} and \code{\link[base:grep]{base::grepl()}} these functions do not special +Unlike \code{\link[base:grep]{base::grep()}} and \code{\link[base:grepl]{base::grepl()}} these functions do not special case factors. Both \code{pattern} and \code{x} are converted to UTF-8. diff --git a/man/ansi_has_any.Rd b/man/ansi_has_any.Rd index 8313bbfa..d9b395fa 100644 --- a/man/ansi_has_any.Rd +++ b/man/ansi_has_any.Rd @@ -29,10 +29,10 @@ ansi_has_any("foobar") ansi_has_any(col_red("foobar")) } \seealso{ -Other low level ANSI functions: -\code{\link{ansi_hide_cursor}()}, -\code{\link{ansi_regex}()}, -\code{\link{ansi_string}()}, -\code{\link{ansi_strip}()} +Other low level ANSI functions: +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=ansi_regex]{ansi_regex()}}, +\code{\link[=ansi_string]{ansi_string()}}, +\code{\link[=ansi_strip]{ansi_strip()}} } \concept{low level ANSI functions} diff --git a/man/ansi_hide_cursor.Rd b/man/ansi_hide_cursor.Rd index 0e22a0bb..294be76b 100644 --- a/man/ansi_hide_cursor.Rd +++ b/man/ansi_hide_cursor.Rd @@ -33,15 +33,15 @@ does nothing. evaluating an expression. } \seealso{ -Other terminal capabilities: -\code{\link{is_ansi_tty}()}, -\code{\link{is_dynamic_tty}()} +Other terminal capabilities: +\code{\link[=is_ansi_tty]{is_ansi_tty()}}, +\code{\link[=is_dynamic_tty]{is_dynamic_tty()}} -Other low level ANSI functions: -\code{\link{ansi_has_any}()}, -\code{\link{ansi_regex}()}, -\code{\link{ansi_string}()}, -\code{\link{ansi_strip}()} +Other low level ANSI functions: +\code{\link[=ansi_has_any]{ansi_has_any()}}, +\code{\link[=ansi_regex]{ansi_regex()}}, +\code{\link[=ansi_string]{ansi_string()}}, +\code{\link[=ansi_strip]{ansi_strip()}} } \concept{low level ANSI functions} \concept{terminal capabilities} diff --git a/man/ansi_html.Rd b/man/ansi_html.Rd index 7bde7424..dd163a7e 100644 --- a/man/ansi_html.Rd +++ b/man/ansi_html.Rd @@ -40,7 +40,7 @@ if (interactive()) htmltools::html_print(page) \dontshow{\}) # examplesIf} } \seealso{ -Other ANSI to HTML conversion: -\code{\link{ansi_html_style}()} +Other ANSI to HTML conversion: +\code{\link[=ansi_html_style]{ansi_html_style()}} } \concept{ANSI to HTML conversion} diff --git a/man/ansi_html_style.Rd b/man/ansi_html_style.Rd index c18e78d0..687097c5 100644 --- a/man/ansi_html_style.Rd +++ b/man/ansi_html_style.Rd @@ -38,7 +38,7 @@ ansi_html_style(colors = FALSE) ansi_html_style(colors = 8, palette = "iterm-snazzy") } \seealso{ -Other ANSI to HTML conversion: -\code{\link{ansi_html}()} +Other ANSI to HTML conversion: +\code{\link[=ansi_html]{ansi_html()}} } \concept{ANSI to HTML conversion} diff --git a/man/ansi_nchar.Rd b/man/ansi_nchar.Rd index 23a32d86..4a5dcedc 100644 --- a/man/ansi_nchar.Rd +++ b/man/ansi_nchar.Rd @@ -34,15 +34,15 @@ ansi_nchar(str) nchar(ansi_strip(str)) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_nzchar.Rd b/man/ansi_nzchar.Rd index ad11b31b..2f1e63f7 100644 --- a/man/ansi_nzchar.Rd +++ b/man/ansi_nzchar.Rd @@ -2,18 +2,18 @@ % Please edit documentation in R/ansiex.R \name{ansi_nzchar} \alias{ansi_nzchar} -\title{Like \code{\link[base:nchar]{base::nzchar()}}, but for ANSI strings} +\title{Like \code{\link[base:nzchar]{base::nzchar()}}, but for ANSI strings} \usage{ ansi_nzchar(x, ...) } \arguments{ \item{x}{Character vector. Other objects are coerced using -\code{\link[base:character]{base::as.character()}}.} +\code{\link[base:as.character]{base::as.character()}}.} -\item{...}{Passed to \code{\link[base:nchar]{base::nzchar()}}.} +\item{...}{Passed to \code{\link[base:nzchar]{base::nzchar()}}.} } \description{ -Like \code{\link[base:nchar]{base::nzchar()}}, but for ANSI strings +Like \code{\link[base:nzchar]{base::nzchar()}}, but for ANSI strings } \examples{ ansi_nzchar("") diff --git a/man/ansi_palettes.Rd b/man/ansi_palettes.Rd index c1e8dcca..ae8c9ee5 100644 --- a/man/ansi_palettes.Rd +++ b/man/ansi_palettes.Rd @@ -71,4 +71,3 @@ is one palette. ansi_palettes ansi_palette_show("dichro", colors = truecolor) } -\keyword{datasets} diff --git a/man/ansi_regex.Rd b/man/ansi_regex.Rd index e0c9f888..f124865d 100644 --- a/man/ansi_regex.Rd +++ b/man/ansi_regex.Rd @@ -15,10 +15,10 @@ Don't forget to use \code{perl = TRUE} when using this with \code{\link[=grepl]{ friends. } \seealso{ -Other low level ANSI functions: -\code{\link{ansi_has_any}()}, -\code{\link{ansi_hide_cursor}()}, -\code{\link{ansi_string}()}, -\code{\link{ansi_strip}()} +Other low level ANSI functions: +\code{\link[=ansi_has_any]{ansi_has_any()}}, +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=ansi_string]{ansi_string()}}, +\code{\link[=ansi_strip]{ansi_strip()}} } \concept{low level ANSI functions} diff --git a/man/ansi_string.Rd b/man/ansi_string.Rd index dc259dd5..015084a2 100644 --- a/man/ansi_string.Rd +++ b/man/ansi_string.Rd @@ -20,10 +20,10 @@ This function sets the class of its argument, activating ANSI-string-specific methods such as for printing. } \seealso{ -Other low level ANSI functions: -\code{\link{ansi_has_any}()}, -\code{\link{ansi_hide_cursor}()}, -\code{\link{ansi_regex}()}, -\code{\link{ansi_strip}()} +Other low level ANSI functions: +\code{\link[=ansi_has_any]{ansi_has_any()}}, +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=ansi_regex]{ansi_regex()}}, +\code{\link[=ansi_strip]{ansi_strip()}} } \concept{low level ANSI functions} diff --git a/man/ansi_strip.Rd b/man/ansi_strip.Rd index db56aae3..15f7f5a0 100644 --- a/man/ansi_strip.Rd +++ b/man/ansi_strip.Rd @@ -27,10 +27,10 @@ from the result. ansi_strip(col_red("foobar")) == "foobar" } \seealso{ -Other low level ANSI functions: -\code{\link{ansi_has_any}()}, -\code{\link{ansi_hide_cursor}()}, -\code{\link{ansi_regex}()}, -\code{\link{ansi_string}()} +Other low level ANSI functions: +\code{\link[=ansi_has_any]{ansi_has_any()}}, +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=ansi_regex]{ansi_regex()}}, +\code{\link[=ansi_string]{ansi_string()}} } \concept{low level ANSI functions} diff --git a/man/ansi_strsplit.Rd b/man/ansi_strsplit.Rd index 125466a9..94bd3af6 100644 --- a/man/ansi_strsplit.Rd +++ b/man/ansi_strsplit.Rd @@ -45,15 +45,15 @@ cat(ansi_strsplit(str, "")[[1]], "\n", sep = " ") strsplit(ansi_strip(str), "") } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_strtrim.Rd b/man/ansi_strtrim.Rd index c530c1f0..d3080356 100644 --- a/man/ansi_strtrim.Rd +++ b/man/ansi_strtrim.Rd @@ -28,15 +28,15 @@ text <- cli::col_red(cli:::lorem_ipsum()) ansi_strtrim(c(text, "foobar"), 40) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_strwrap.Rd b/man/ansi_strwrap.Rd index 41d597d4..0de82b69 100644 --- a/man/ansi_strwrap.Rd +++ b/man/ansi_strwrap.Rd @@ -44,15 +44,15 @@ wrp <- ansi_strwrap(text, width = 40) cat(wrp, sep = "\n") } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_substr.Rd b/man/ansi_substr.Rd index ac52cf6f..f2ec9e26 100644 --- a/man/ansi_substr.Rd +++ b/man/ansi_substr.Rd @@ -53,15 +53,15 @@ cat(ansi_substr(c(str, str2), c(3,5), c(7, 18)), sep = "\n") substr(ansi_strip(c(str, str2)), c(3,5), c(7, 18)) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_substring.Rd b/man/ansi_substring.Rd index ff1fe467..a37fd891 100644 --- a/man/ansi_substring.Rd +++ b/man/ansi_substring.Rd @@ -22,7 +22,7 @@ Character vector of the same length as \code{x}, containing the requested substrings. ANSI styles are retained. } \description{ -This is the color-aware counterpart of \code{\link[base:substr]{base::substring()}}. +This is the color-aware counterpart of \code{\link[base:substring]{base::substring()}}. It works exactly like the original, but keeps the colors in the substrings. The ANSI escape sequences are ignored when calculating the positions within the string. @@ -54,15 +54,15 @@ cat(ansi_substring(str2, c(3,5), c(7, 18)), sep = "\n") substring(ansi_strip(str2), c(3,5), c(7, 18)) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_toupper}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_toupper.Rd b/man/ansi_toupper.Rd index 66bdf301..a0ae42ee 100644 --- a/man/ansi_toupper.Rd +++ b/man/ansi_toupper.Rd @@ -40,37 +40,15 @@ x <- paste0(col_green("MiXeD"), col_red(" cAsE 123")) ansi_chartr("iXs", "why", x) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_trimws}()} - -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_trimws}()} - -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_trimws}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_trimws]{ansi_trimws()}} } \concept{ANSI string operations} diff --git a/man/ansi_trimws.Rd b/man/ansi_trimws.Rd index 2da8d219..727823a1 100644 --- a/man/ansi_trimws.Rd +++ b/man/ansi_trimws.Rd @@ -25,15 +25,15 @@ trimws(col_red(" I am red ")) ansi_trimws(col_red(" I am red ")) } \seealso{ -Other ANSI string operations: -\code{\link{ansi_align}()}, -\code{\link{ansi_columns}()}, -\code{\link{ansi_nchar}()}, -\code{\link{ansi_strsplit}()}, -\code{\link{ansi_strtrim}()}, -\code{\link{ansi_strwrap}()}, -\code{\link{ansi_substr}()}, -\code{\link{ansi_substring}()}, -\code{\link{ansi_toupper}()} +Other ANSI string operations: +\code{\link[=ansi_align]{ansi_align()}}, +\code{\link[=ansi_columns]{ansi_columns()}}, +\code{\link[=ansi_nchar]{ansi_nchar()}}, +\code{\link[=ansi_strsplit]{ansi_strsplit()}}, +\code{\link[=ansi_strtrim]{ansi_strtrim()}}, +\code{\link[=ansi_strwrap]{ansi_strwrap()}}, +\code{\link[=ansi_substr]{ansi_substr()}}, +\code{\link[=ansi_substring]{ansi_substring()}}, +\code{\link[=ansi_toupper]{ansi_toupper()}} } \concept{ANSI string operations} diff --git a/man/cli-package.Rd b/man/cli-package.Rd index 058ea2c5..a0f4d14e 100644 --- a/man/cli-package.Rd +++ b/man/cli-package.Rd @@ -19,6 +19,11 @@ Useful links: \author{ \strong{Maintainer}: Gábor Csárdi \email{gabor@posit.co} +Authors: +\itemize{ + \item Gábor Csárdi \email{gabor@posit.co} +} + Other contributors: \itemize{ \item Hadley Wickham [contributor] diff --git a/man/cli_abort.Rd b/man/cli_abort.Rd index dba8ac57..d4b5e665 100644 --- a/man/cli_abort.Rd +++ b/man/cli_abort.Rd @@ -22,8 +22,8 @@ cli_inform(message, ..., .envir = parent.frame()) \arguments{ \item{message}{It is formatted via a call to \code{\link[=cli_bullets]{cli_bullets()}}.} -\item{...}{Passed to \code{\link[rlang:abort]{rlang::abort()}}, \code{\link[rlang:abort]{rlang::warn()}} or -\code{\link[rlang:abort]{rlang::inform()}}.} +\item{...}{Passed to \code{\link[rlang:abort]{rlang::abort()}}, \code{\link[rlang:warn]{rlang::warn()}} or +\code{\link[rlang:inform]{rlang::inform()}}.} \item{call}{The execution environment of a currently running function, e.g. \code{call = caller_env()}. The corresponding function @@ -86,27 +86,27 @@ cli_abort(c( \seealso{ These functions support \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_alert.Rd b/man/cli_alert.Rd index 736cd20f..f1fb84be 100644 --- a/man/cli_alert.Rd +++ b/man/cli_alert.Rd @@ -126,27 +126,27 @@ cli_alert_info("Data columns: \{.val \{names(mtcars)\}\}.", wrap = TRUE) \seealso{ These functions supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_blockquote.Rd b/man/cli_blockquote.Rd index a5b520ac..59d8797b 100644 --- a/man/cli_blockquote.Rd +++ b/man/cli_blockquote.Rd @@ -52,27 +52,27 @@ cli_blockquote(evil, citation = "Donald Ervin Knuth") \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_bullets.Rd b/man/cli_bullets.Rd index 5027f9a1..cfbc230b 100644 --- a/man/cli_bullets.Rd +++ b/man/cli_bullets.Rd @@ -70,27 +70,27 @@ corresponding \verb{bullet-} classes. \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_bullets_raw.Rd b/man/cli_bullets_raw.Rd index d850fef1..6a68cc9d 100644 --- a/man/cli_bullets_raw.Rd +++ b/man/cli_bullets_raw.Rd @@ -29,27 +29,27 @@ These functions support \link[=inline-markup]{inline markup}. See \code{\link[=cli_bullets]{cli_bullets()}} for examples. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_dl.Rd b/man/cli_dl.Rd index 2c39d51b..a3247276 100644 --- a/man/cli_dl.Rd +++ b/man/cli_dl.Rd @@ -80,27 +80,27 @@ fun() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_h1.Rd b/man/cli_h1.Rd index e55bb61f..2c11b985 100644 --- a/man/cli_h1.Rd +++ b/man/cli_h1.Rd @@ -45,27 +45,27 @@ cli_h3("Header \{.emph 3\}") \seealso{ These functions supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_li.Rd b/man/cli_li.Rd index cd6dd3ed..4b924e86 100644 --- a/man/cli_li.Rd +++ b/man/cli_li.Rd @@ -64,27 +64,27 @@ fun() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_ol.Rd b/man/cli_ol.Rd index 67798869..1355c551 100644 --- a/man/cli_ol.Rd +++ b/man/cli_ol.Rd @@ -104,27 +104,27 @@ fun() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_process_start.Rd b/man/cli_process_start.Rd index d6238b0e..c9d96ed2 100644 --- a/man/cli_process_start.Rd +++ b/man/cli_process_start.Rd @@ -117,33 +117,33 @@ This function supports \link[=inline-markup]{inline markup}. The \code{\link[=cli_progress_message]{cli_progress_message()}} and \code{\link[=cli_progress_step]{cli_progress_step()}} functions, for a superior API. -Other status bar: -\code{\link{cli_status}()}, -\code{\link{cli_status_clear}()}, -\code{\link{cli_status_update}()} - -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other status bar: +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_clear]{cli_status_clear()}}, +\code{\link[=cli_status_update]{cli_status_update()}} + +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{status bar} diff --git a/man/cli_progress_along.Rd b/man/cli_progress_along.Rd index 3b34b01d..d02266b8 100644 --- a/man/cli_progress_along.Rd +++ b/man/cli_progress_along.Rd @@ -107,38 +107,38 @@ This function supports \link[=inline-markup]{inline markup}. \code{\link[=cli_progress_bar]{cli_progress_bar()}} and the traditional progress bar API. -Other progress bar functions: -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{progress bar functions} diff --git a/man/cli_progress_bar.Rd b/man/cli_progress_bar.Rd index ca8abbbd..fcdd96ae 100644 --- a/man/cli_progress_bar.Rd +++ b/man/cli_progress_bar.Rd @@ -367,38 +367,38 @@ These functions support \link[=inline-markup]{inline markup}. \code{\link[=cli_progress_message]{cli_progress_message()}} and \code{\link[=cli_progress_step]{cli_progress_step()}} for simpler progress messages. -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{progress bar functions} diff --git a/man/cli_progress_builtin_handlers.Rd b/man/cli_progress_builtin_handlers.Rd index 7a086be6..04f0136e 100644 --- a/man/cli_progress_builtin_handlers.Rd +++ b/man/cli_progress_builtin_handlers.Rd @@ -85,14 +85,14 @@ This handler is available if a shiny app is running. } \seealso{ -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} } \concept{progress bar functions} diff --git a/man/cli_progress_message.Rd b/man/cli_progress_message.Rd index 02376909..07466563 100644 --- a/man/cli_progress_message.Rd +++ b/man/cli_progress_message.Rd @@ -65,38 +65,38 @@ This function supports \link[=inline-markup]{inline markup}. \code{\link[=cli_progress_bar]{cli_progress_bar()}} for the complete progress bar API. \code{\link[=cli_progress_step]{cli_progress_step()}} for a similar display that is styled by default. -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{progress bar functions} diff --git a/man/cli_progress_output.Rd b/man/cli_progress_output.Rd index 6cbe4a64..564ca9ea 100644 --- a/man/cli_progress_output.Rd +++ b/man/cli_progress_output.Rd @@ -46,38 +46,38 @@ fun() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{progress bar functions} diff --git a/man/cli_progress_step.Rd b/man/cli_progress_step.Rd index 6f12015a..96ca9181 100644 --- a/man/cli_progress_step.Rd +++ b/man/cli_progress_step.Rd @@ -145,38 +145,38 @@ f() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{progress bar functions} diff --git a/man/cli_progress_styles.Rd b/man/cli_progress_styles.Rd index 65ec4e01..98569dce 100644 --- a/man/cli_progress_styles.Rd +++ b/man/cli_progress_styles.Rd @@ -44,14 +44,14 @@ options(cli.progress_var_style = NULL) }} } \seealso{ -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, \code{\link{progress-variables}} } \concept{progress bar functions} diff --git a/man/cli_rule.Rd b/man/cli_rule.Rd index c42214c8..00303dfd 100644 --- a/man/cli_rule.Rd +++ b/man/cli_rule.Rd @@ -71,27 +71,27 @@ cli_end(d) \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_status.Rd b/man/cli_status.Rd index dbb6fa5e..be5a0c83 100644 --- a/man/cli_status.Rd +++ b/man/cli_status.Rd @@ -71,33 +71,33 @@ Status bars support \link[=inline-markup]{inline markup}. The \code{\link[=cli_progress_message]{cli_progress_message()}} and \code{\link[=cli_progress_step]{cli_progress_step()}} functions, for a superior API. -Other status bar: -\code{\link{cli_process_start}()}, -\code{\link{cli_status_clear}()}, -\code{\link{cli_status_update}()} +Other status bar: +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_status_clear]{cli_status_clear()}}, +\code{\link[=cli_status_update]{cli_status_update()}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{status bar} diff --git a/man/cli_status_clear.Rd b/man/cli_status_clear.Rd index 875ae0f8..9d9b35db 100644 --- a/man/cli_status_clear.Rd +++ b/man/cli_status_clear.Rd @@ -43,9 +43,9 @@ Clear the status bar The \code{\link[=cli_progress_message]{cli_progress_message()}} and \code{\link[=cli_progress_step]{cli_progress_step()}} functions, for a superior API. -Other status bar: -\code{\link{cli_process_start}()}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()} +Other status bar: +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}} } \concept{status bar} diff --git a/man/cli_status_update.Rd b/man/cli_status_update.Rd index 9045f2f9..12ad3db7 100644 --- a/man/cli_status_update.Rd +++ b/man/cli_status_update.Rd @@ -43,33 +43,33 @@ This function supports \link[=inline-markup]{inline markup}. The \code{\link[=cli_progress_message]{cli_progress_message()}} and \code{\link[=cli_progress_step]{cli_progress_step()}} functions, for a superior API. -Other status bar: -\code{\link{cli_process_start}()}, -\code{\link{cli_status}()}, -\code{\link{cli_status_clear}()} +Other status bar: +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_clear]{cli_status_clear()}} -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} \concept{status bar} diff --git a/man/cli_text.Rd b/man/cli_text.Rd index c3027099..ae713b8e 100644 --- a/man/cli_text.Rd +++ b/man/cli_text.Rd @@ -129,27 +129,27 @@ cli_end(ul) \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/cli_ul.Rd b/man/cli_ul.Rd index b9e18a7e..156ba9d0 100644 --- a/man/cli_ul.Rd +++ b/man/cli_ul.Rd @@ -79,27 +79,27 @@ fun() \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{format_error}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=format_error]{format_error()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/code_highlight.Rd b/man/code_highlight.Rd index c6437972..2d2e093b 100644 --- a/man/code_highlight.Rd +++ b/man/code_highlight.Rd @@ -33,7 +33,7 @@ code_highlight(deparse(ls)) cat(code_highlight(deparse(ls)), sep = "\n") } \seealso{ -Other syntax highlighting: -\code{\link{code_theme_list}()} +Other syntax highlighting: +\code{\link[=code_theme_list]{code_theme_list()}} } \concept{syntax highlighting} diff --git a/man/code_theme_list.Rd b/man/code_theme_list.Rd index 0c67af36..c4ef89a1 100644 --- a/man/code_theme_list.Rd +++ b/man/code_theme_list.Rd @@ -51,7 +51,7 @@ code_theme_list() code_highlight(deparse(get), code_theme = "Solarized Dark") } \seealso{ -Other syntax highlighting: -\code{\link{code_highlight}()} +Other syntax highlighting: +\code{\link[=code_highlight]{code_highlight()}} } \concept{syntax highlighting} diff --git a/man/combine_ansi_styles.Rd b/man/combine_ansi_styles.Rd index 07ce363d..6e432fad 100644 --- a/man/combine_ansi_styles.Rd +++ b/man/combine_ansi_styles.Rd @@ -42,9 +42,9 @@ alert <- combine_ansi_styles( cat(alert("Warning!"), "\n") } \seealso{ -Other ANSI styling: +Other ANSI styling: \code{\link{ansi-styles}}, -\code{\link{make_ansi_style}()}, -\code{\link{num_ansi_colors}()} +\code{\link[=make_ansi_style]{make_ansi_style()}}, +\code{\link[=num_ansi_colors]{num_ansi_colors()}} } \concept{ANSI styling} diff --git a/man/demo_spinners.Rd b/man/demo_spinners.Rd index 53ef7e58..3714e8a3 100644 --- a/man/demo_spinners.Rd +++ b/man/demo_spinners.Rd @@ -19,9 +19,9 @@ Each spinner is shown for about 2-3 seconds. \if{html}{\figure{demo-spinners.svg}} } \seealso{ -Other spinners: -\code{\link{get_spinner}()}, -\code{\link{list_spinners}()}, -\code{\link{make_spinner}()} +Other spinners: +\code{\link[=get_spinner]{get_spinner()}}, +\code{\link[=list_spinners]{list_spinners()}}, +\code{\link[=make_spinner]{make_spinner()}} } \concept{spinners} diff --git a/man/diff_chr.Rd b/man/diff_chr.Rd index c1766024..cb944f0b 100644 --- a/man/diff_chr.Rd +++ b/man/diff_chr.Rd @@ -49,7 +49,7 @@ diff_chr(letters, letters2) The diffobj package for a much more comprehensive set of \code{diff}-like tools. -Other diff functions in cli: -\code{\link{diff_str}()} +Other diff functions in cli: +\code{\link[=diff_str]{diff_str()}} } \concept{diff functions in cli} diff --git a/man/diff_str.Rd b/man/diff_str.Rd index 36c9b292..4b8122ff 100644 --- a/man/diff_str.Rd +++ b/man/diff_str.Rd @@ -34,7 +34,7 @@ diff_str(str1, str2) The diffobj package for a much more comprehensive set of \code{diff}-like tools. -Other diff functions in cli: -\code{\link{diff_chr}()} +Other diff functions in cli: +\code{\link[=diff_chr]{diff_chr()}} } \concept{diff functions in cli} diff --git a/man/format_error.Rd b/man/format_error.Rd index b5958562..2253ab19 100644 --- a/man/format_error.Rd +++ b/man/format_error.Rd @@ -55,27 +55,27 @@ stop(format_error(c( \seealso{ These functions support \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_inline}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_inline]{format_inline()}} } \concept{functions supporting inline markup} diff --git a/man/format_inline.Rd b/man/format_inline.Rd index 9be129ce..758db68d 100644 --- a/man/format_inline.Rd +++ b/man/format_inline.Rd @@ -38,27 +38,27 @@ format_inline("A message for {.emph later}, thanks {.fn format_inline}.") \seealso{ This function supports \link[=inline-markup]{inline markup}. -Other functions supporting inline markup: -\code{\link{cli_abort}()}, -\code{\link{cli_alert}()}, -\code{\link{cli_blockquote}()}, -\code{\link{cli_bullets}()}, -\code{\link{cli_bullets_raw}()}, -\code{\link{cli_dl}()}, -\code{\link{cli_h1}()}, -\code{\link{cli_li}()}, -\code{\link{cli_ol}()}, -\code{\link{cli_process_start}()}, -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_rule}}, -\code{\link{cli_status}()}, -\code{\link{cli_status_update}()}, -\code{\link{cli_text}()}, -\code{\link{cli_ul}()}, -\code{\link{format_error}()} +Other functions supporting inline markup: +\code{\link[=cli_abort]{cli_abort()}}, +\code{\link[=cli_alert]{cli_alert()}}, +\code{\link[=cli_blockquote]{cli_blockquote()}}, +\code{\link[=cli_bullets]{cli_bullets()}}, +\code{\link[=cli_bullets_raw]{cli_bullets_raw()}}, +\code{\link[=cli_dl]{cli_dl()}}, +\code{\link[=cli_h1]{cli_h1()}}, +\code{\link[=cli_li]{cli_li()}}, +\code{\link[=cli_ol]{cli_ol()}}, +\code{\link[=cli_process_start]{cli_process_start()}}, +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_rule]{cli_rule()}}, +\code{\link[=cli_status]{cli_status()}}, +\code{\link[=cli_status_update]{cli_status_update()}}, +\code{\link[=cli_text]{cli_text()}}, +\code{\link[=cli_ul]{cli_ul()}}, +\code{\link[=format_error]{format_error()}} } \concept{functions supporting inline markup} diff --git a/man/get_spinner.Rd b/man/get_spinner.Rd index 7f59e43d..cf183559 100644 --- a/man/get_spinner.Rd +++ b/man/get_spinner.Rd @@ -39,9 +39,9 @@ options(cli.spinner = NULL) \if{html}{\figure{get-spinner.svg}} } \seealso{ -Other spinners: -\code{\link{demo_spinners}()}, -\code{\link{list_spinners}()}, -\code{\link{make_spinner}()} +Other spinners: +\code{\link[=demo_spinners]{demo_spinners()}}, +\code{\link[=list_spinners]{list_spinners()}}, +\code{\link[=make_spinner]{make_spinner()}} } \concept{spinners} diff --git a/man/has_keypress_support.Rd b/man/has_keypress_support.Rd index 08de2b75..d17fef0d 100644 --- a/man/has_keypress_support.Rd +++ b/man/has_keypress_support.Rd @@ -35,7 +35,7 @@ Not supported: has_keypress_support() } \seealso{ -Other keypress function: -\code{\link{keypress}()} +Other keypress function: +\code{\link[=keypress]{keypress()}} } \concept{keypress function} diff --git a/man/hash_animal.Rd b/man/hash_animal.Rd index 1376b63c..c9c78c3b 100644 --- a/man/hash_animal.Rd +++ b/man/hash_animal.Rd @@ -82,11 +82,11 @@ hash_animal("cli package", 3)$hash \seealso{ the ids package for generating random adjective-animal ids -Other hash functions: -\code{\link{hash_emoji}()}, -\code{\link{hash_md5}()}, -\code{\link{hash_sha1}()}, -\code{\link{hash_sha256}()}, -\code{\link{hash_xxhash}()} +Other hash functions: +\code{\link[=hash_emoji]{hash_emoji()}}, +\code{\link[=hash_md5]{hash_md5()}}, +\code{\link[=hash_sha1]{hash_sha1()}}, +\code{\link[=hash_sha256]{hash_sha256()}}, +\code{\link[=hash_xxhash]{hash_xxhash()}} } \concept{hash functions} diff --git a/man/hash_emoji.Rd b/man/hash_emoji.Rd index b35cba78..30359292 100644 --- a/man/hash_emoji.Rd +++ b/man/hash_emoji.Rd @@ -80,11 +80,11 @@ hash_emoji("foobar", 4)$text \seealso{ the emoji package for a comprehensive list of emojis -Other hash functions: -\code{\link{hash_animal}()}, -\code{\link{hash_md5}()}, -\code{\link{hash_sha1}()}, -\code{\link{hash_sha256}()}, -\code{\link{hash_xxhash}()} +Other hash functions: +\code{\link[=hash_animal]{hash_animal()}}, +\code{\link[=hash_md5]{hash_md5()}}, +\code{\link[=hash_sha1]{hash_sha1()}}, +\code{\link[=hash_sha256]{hash_sha256()}}, +\code{\link[=hash_xxhash]{hash_xxhash()}} } \concept{hash functions} diff --git a/man/hash_md5.Rd b/man/hash_md5.Rd index c67cb416..86242185 100644 --- a/man/hash_md5.Rd +++ b/man/hash_md5.Rd @@ -53,11 +53,11 @@ hash_md5(c("foo", NA, "bar", "")) \code{\link[tools:md5sum]{tools::md5sum()}} for a base R MD5 function that works on files. -Other hash functions: -\code{\link{hash_animal}()}, -\code{\link{hash_emoji}()}, -\code{\link{hash_sha1}()}, -\code{\link{hash_sha256}()}, -\code{\link{hash_xxhash}()} +Other hash functions: +\code{\link[=hash_animal]{hash_animal()}}, +\code{\link[=hash_emoji]{hash_emoji()}}, +\code{\link[=hash_sha1]{hash_sha1()}}, +\code{\link[=hash_sha256]{hash_sha256()}}, +\code{\link[=hash_xxhash]{hash_xxhash()}} } \concept{hash functions} diff --git a/man/hash_sha1.Rd b/man/hash_sha1.Rd index abc919d4..a7d884bc 100644 --- a/man/hash_sha1.Rd +++ b/man/hash_sha1.Rd @@ -53,11 +53,11 @@ more files. hash_sha1(c("foo", NA, "bar", "")) } \seealso{ -Other hash functions: -\code{\link{hash_animal}()}, -\code{\link{hash_emoji}()}, -\code{\link{hash_md5}()}, -\code{\link{hash_sha256}()}, -\code{\link{hash_xxhash}()} +Other hash functions: +\code{\link[=hash_animal]{hash_animal()}}, +\code{\link[=hash_emoji]{hash_emoji()}}, +\code{\link[=hash_md5]{hash_md5()}}, +\code{\link[=hash_sha256]{hash_sha256()}}, +\code{\link[=hash_xxhash]{hash_xxhash()}} } \concept{hash functions} diff --git a/man/hash_sha256.Rd b/man/hash_sha256.Rd index 6a3d879f..0ace3687 100644 --- a/man/hash_sha256.Rd +++ b/man/hash_sha256.Rd @@ -53,11 +53,11 @@ more files. hash_sha256(c("foo", NA, "bar", "")) } \seealso{ -Other hash functions: -\code{\link{hash_animal}()}, -\code{\link{hash_emoji}()}, -\code{\link{hash_md5}()}, -\code{\link{hash_sha1}()}, -\code{\link{hash_xxhash}()} +Other hash functions: +\code{\link[=hash_animal]{hash_animal()}}, +\code{\link[=hash_emoji]{hash_emoji()}}, +\code{\link[=hash_md5]{hash_md5()}}, +\code{\link[=hash_sha1]{hash_sha1()}}, +\code{\link[=hash_xxhash]{hash_xxhash()}} } \concept{hash functions} diff --git a/man/hash_xxhash.Rd b/man/hash_xxhash.Rd index 8c65255b..11b2b254 100644 --- a/man/hash_xxhash.Rd +++ b/man/hash_xxhash.Rd @@ -68,11 +68,11 @@ of xxHash. Otherwise they work the same. hash_xxhash(c("foo", NA, "bar", "")) } \seealso{ -Other hash functions: -\code{\link{hash_animal}()}, -\code{\link{hash_emoji}()}, -\code{\link{hash_md5}()}, -\code{\link{hash_sha1}()}, -\code{\link{hash_sha256}()} +Other hash functions: +\code{\link[=hash_animal]{hash_animal()}}, +\code{\link[=hash_emoji]{hash_emoji()}}, +\code{\link[=hash_md5]{hash_md5()}}, +\code{\link[=hash_sha1]{hash_sha1()}}, +\code{\link[=hash_sha256]{hash_sha256()}} } \concept{hash functions} diff --git a/man/is_ansi_tty.Rd b/man/is_ansi_tty.Rd index 75f1dca1..c610abc6 100644 --- a/man/is_ansi_tty.Rd +++ b/man/is_ansi_tty.Rd @@ -31,8 +31,8 @@ We check that all of the following hold: is_ansi_tty() } \seealso{ -Other terminal capabilities: -\code{\link{ansi_hide_cursor}()}, -\code{\link{is_dynamic_tty}()} +Other terminal capabilities: +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=is_dynamic_tty]{is_dynamic_tty()}} } \concept{terminal capabilities} diff --git a/man/is_dynamic_tty.Rd b/man/is_dynamic_tty.Rd index 065a91d9..73883d33 100644 --- a/man/is_dynamic_tty.Rd +++ b/man/is_dynamic_tty.Rd @@ -43,8 +43,8 @@ is_dynamic_tty() is_dynamic_tty(stdout()) } \seealso{ -Other terminal capabilities: -\code{\link{ansi_hide_cursor}()}, -\code{\link{is_ansi_tty}()} +Other terminal capabilities: +\code{\link[=ansi_hide_cursor]{ansi_hide_cursor()}}, +\code{\link[=is_ansi_tty]{is_ansi_tty()}} } \concept{terminal capabilities} diff --git a/man/keypress.Rd b/man/keypress.Rd index e1dd332e..7764c030 100644 --- a/man/keypress.Rd +++ b/man/keypress.Rd @@ -37,7 +37,7 @@ cat("You pressed key", x, "\n") \dontshow{\}) # examplesIf} } \seealso{ -Other keypress function: -\code{\link{has_keypress_support}()} +Other keypress function: +\code{\link[=has_keypress_support]{has_keypress_support()}} } \concept{keypress function} diff --git a/man/links.Rd b/man/links.Rd index e8e847a8..104df18d 100644 --- a/man/links.Rd +++ b/man/links.Rd @@ -8,7 +8,7 @@ Certain cli styles create clickable links, if your IDE or terminal supports them. } \section{Note: hyperlinks are currently experimental}{ -The details of the styles that create hyperlinks will prrobably change +The details of the styles that create hyperlinks will probably change in the near future, based on user feedback. } diff --git a/man/list_spinners.Rd b/man/list_spinners.Rd index 74997c3d..09ef8a58 100644 --- a/man/list_spinners.Rd +++ b/man/list_spinners.Rd @@ -17,9 +17,9 @@ list_spinners() get_spinner(list_spinners()[1]) } \seealso{ -Other spinners: -\code{\link{demo_spinners}()}, -\code{\link{get_spinner}()}, -\code{\link{make_spinner}()} +Other spinners: +\code{\link[=demo_spinners]{demo_spinners()}}, +\code{\link[=get_spinner]{get_spinner()}}, +\code{\link[=make_spinner]{make_spinner()}} } \concept{spinners} diff --git a/man/make_ansi_style.Rd b/man/make_ansi_style.Rd index 33ca9f9f..4e92b515 100644 --- a/man/make_ansi_style.Rd +++ b/man/make_ansi_style.Rd @@ -55,9 +55,9 @@ orange("foobar") cat(orange("foobar")) } \seealso{ -Other ANSI styling: +Other ANSI styling: \code{\link{ansi-styles}}, -\code{\link{combine_ansi_styles}()}, -\code{\link{num_ansi_colors}()} +\code{\link[=combine_ansi_styles]{combine_ansi_styles()}}, +\code{\link[=num_ansi_colors]{num_ansi_colors()}} } \concept{ANSI styling} diff --git a/man/make_spinner.Rd b/man/make_spinner.Rd index dbe11d55..9b70fe9f 100644 --- a/man/make_spinner.Rd +++ b/man/make_spinner.Rd @@ -100,9 +100,9 @@ ansi_with_hidden_cursor(fun_with_spinner3()) } \seealso{ -Other spinners: -\code{\link{demo_spinners}()}, -\code{\link{get_spinner}()}, -\code{\link{list_spinners}()} +Other spinners: +\code{\link[=demo_spinners]{demo_spinners()}}, +\code{\link[=get_spinner]{get_spinner()}}, +\code{\link[=list_spinners]{list_spinners()}} } \concept{spinners} diff --git a/man/num_ansi_colors.Rd b/man/num_ansi_colors.Rd index 90f3e493..817ed743 100644 --- a/man/num_ansi_colors.Rd +++ b/man/num_ansi_colors.Rd @@ -117,9 +117,9 @@ num_ansi_colors() } \seealso{ -Other ANSI styling: +Other ANSI styling: \code{\link{ansi-styles}}, -\code{\link{combine_ansi_styles}()}, -\code{\link{make_ansi_style}()} +\code{\link[=combine_ansi_styles]{combine_ansi_styles()}}, +\code{\link[=make_ansi_style]{make_ansi_style()}} } \concept{ANSI styling} diff --git a/man/pluralization-helpers.Rd b/man/pluralization-helpers.Rd index bcb46dfd..177900f2 100644 --- a/man/pluralization-helpers.Rd +++ b/man/pluralization-helpers.Rd @@ -33,8 +33,8 @@ nfile <- 2; cli_text("Found {no(nfile)} file{?s}.") } \seealso{ -Other pluralization: +Other pluralization: \code{\link{pluralization}}, -\code{\link{pluralize}()} +\code{\link[=pluralize]{pluralize()}} } \concept{pluralization} diff --git a/man/pluralization.Rd b/man/pluralization.Rd index 64731c85..0e0d8786 100644 --- a/man/pluralization.Rd +++ b/man/pluralization.Rd @@ -216,8 +216,8 @@ one otherwise. } \seealso{ -Other pluralization: -\code{\link{no}()}, -\code{\link{pluralize}()} +Other pluralization: +\code{\link[=no]{no()}}, +\code{\link[=pluralize]{pluralize()}} } \concept{pluralization} diff --git a/man/pluralize.Rd b/man/pluralize.Rd index 1739f34c..34894b4c 100644 --- a/man/pluralize.Rd +++ b/man/pluralize.Rd @@ -62,8 +62,8 @@ cli_text("{nupd}/{ntotal} {qty(nupd)} file{?s} {?needs/need} updates") \dontshow{\}) # examplesIf} } \seealso{ -Other pluralization: -\code{\link{no}()}, +Other pluralization: +\code{\link[=no]{no()}}, \code{\link{pluralization}} } \concept{pluralization} diff --git a/man/pretty_print_code.Rd b/man/pretty_print_code.Rd index 178654f6..f5468002 100644 --- a/man/pretty_print_code.Rd +++ b/man/pretty_print_code.Rd @@ -12,5 +12,5 @@ syntax highlighting. } \details{ The new print method takes priority over the built-in one. Use -\code{\link[base:message]{base::suppressMessages()}} to suppress the alert message. +\code{\link[base:suppressMessages]{base::suppressMessages()}} to suppress the alert message. } diff --git a/man/progress-utils.Rd b/man/progress-utils.Rd index d9a2a3f7..6c4c36b8 100644 --- a/man/progress-utils.Rd +++ b/man/progress-utils.Rd @@ -26,14 +26,14 @@ bars created in C/C++ code.) (It currently ignores progress bars created in the C/C++ code.) } \seealso{ -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()}, +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}}, \code{\link{progress-variables}} } \concept{progress bar functions} diff --git a/man/progress-variables.Rd b/man/progress-variables.Rd index 4209f3c2..47052f7f 100644 --- a/man/progress-variables.Rd +++ b/man/progress-variables.Rd @@ -425,14 +425,14 @@ bytes, in a human readable format. } } \seealso{ -Other progress bar functions: -\code{\link{cli_progress_along}()}, -\code{\link{cli_progress_bar}()}, -\code{\link{cli_progress_builtin_handlers}()}, -\code{\link{cli_progress_message}()}, -\code{\link{cli_progress_num}()}, -\code{\link{cli_progress_output}()}, -\code{\link{cli_progress_step}()}, -\code{\link{cli_progress_styles}()} +Other progress bar functions: +\code{\link[=cli_progress_along]{cli_progress_along()}}, +\code{\link[=cli_progress_bar]{cli_progress_bar()}}, +\code{\link[=cli_progress_builtin_handlers]{cli_progress_builtin_handlers()}}, +\code{\link[=cli_progress_message]{cli_progress_message()}}, +\code{\link[=cli_progress_num]{cli_progress_num()}}, +\code{\link[=cli_progress_output]{cli_progress_output()}}, +\code{\link[=cli_progress_step]{cli_progress_step()}}, +\code{\link[=cli_progress_styles]{cli_progress_styles()}} } \concept{progress bar functions} diff --git a/man/utf8_graphemes.Rd b/man/utf8_graphemes.Rd index ca61d4c3..aa15cac8 100644 --- a/man/utf8_graphemes.Rd +++ b/man/utf8_graphemes.Rd @@ -28,8 +28,8 @@ cat(str, "\n") chrs <- utf8_graphemes(str) } \seealso{ -Other UTF-8 string manipulation: -\code{\link{utf8_nchar}()}, -\code{\link{utf8_substr}()} +Other UTF-8 string manipulation: +\code{\link[=utf8_nchar]{utf8_nchar()}}, +\code{\link[=utf8_substr]{utf8_substr()}} } \concept{UTF-8 string manipulation} diff --git a/man/utf8_nchar.Rd b/man/utf8_nchar.Rd index 9022c033..1c8f500c 100644 --- a/man/utf8_nchar.Rd +++ b/man/utf8_nchar.Rd @@ -41,8 +41,8 @@ nchar(emo, "bytes") nchar(emo, "width") } \seealso{ -Other UTF-8 string manipulation: -\code{\link{utf8_graphemes}()}, -\code{\link{utf8_substr}()} +Other UTF-8 string manipulation: +\code{\link[=utf8_graphemes]{utf8_graphemes()}}, +\code{\link[=utf8_substr]{utf8_substr()}} } \concept{UTF-8 string manipulation} diff --git a/man/utf8_substr.Rd b/man/utf8_substr.Rd index 7b9f1770..66f9cdfa 100644 --- a/man/utf8_substr.Rd +++ b/man/utf8_substr.Rd @@ -36,8 +36,8 @@ str24 <- utf8_substr(str, 2, 4) cat(str24) } \seealso{ -Other UTF-8 string manipulation: -\code{\link{utf8_graphemes}()}, -\code{\link{utf8_nchar}()} +Other UTF-8 string manipulation: +\code{\link[=utf8_graphemes]{utf8_graphemes()}}, +\code{\link[=utf8_nchar]{utf8_nchar()}} } \concept{UTF-8 string manipulation} diff --git a/man/vt_output.Rd b/man/vt_output.Rd index 6bd4b2aa..911ac07a 100644 --- a/man/vt_output.Rd +++ b/man/vt_output.Rd @@ -9,7 +9,7 @@ vt_output(output, width = 80L, height = 25L) \arguments{ \item{output}{Character vector or raw vector. Character vectors are collapsed (without a separator), and converted to a raw vector using -\code{\link[base:rawConversion]{base::charToRaw()}}.} +\code{\link[base:charToRaw]{base::charToRaw()}}.} \item{width}{Terminal width.} From 3cc0a6f5f5b7fe2881cc28a81fcdb3de1d83aeed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 13:34:11 +0200 Subject: [PATCH 8/9] Option to turn off stacked progress bars Also add an `R_CLI_ANSI` env var. --- DESCRIPTION | 2 +- NEWS.md | 5 +++ R/status-bar.R | 57 +++++++++++++++++++------- R/tty.R | 62 ++++++++++++++++++++++------- R/utils.R | 3 ++ tests/testthat/_snaps/status-bar.md | 36 +++++++++++++++++ tests/testthat/_snaps/tty.md | 36 +++++++++++++++++ tests/testthat/test-status-bar.R | 59 +++++++++++++++++++++++++++ tests/testthat/test-tty.R | 54 +++++++++++++++++++++++++ vignettes/cli-config-user.Rmd | 21 ++++++++-- 10 files changed, 301 insertions(+), 34 deletions(-) create mode 100644 tests/testthat/_snaps/tty.md create mode 100644 tests/testthat/test-tty.R diff --git a/DESCRIPTION b/DESCRIPTION index 652d0fc0..312e9582 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -19,7 +19,7 @@ Description: A suite of tools to build attractive command line interfaces License: MIT + file LICENSE URL: https://cli.r-lib.org, https://github.com/r-lib/cli BugReports: https://github.com/r-lib/cli/issues -Depends: +Depends: R (>= 3.4) Imports: utils diff --git a/NEWS.md b/NEWS.md index 3b7de8b1..6b74e10e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,11 @@ * Multiple concurrent progress bar and status bars are now rendered on separate lines on ANSI-capable terminals. Non-ANSI dynamic terminals continue to show only the current bar (@simonpcouch, #819). + Set the new `cli.progress_multiline` option to `FALSE` to keep the + single-line behavior on ANSI terminals. + +* New `R_CLI_ANSI` environment variable that is equivalent to the + `cli.ansi` option (the option takes precedence). See `is_ansi_tty()`. # cli 3.6.6 diff --git a/R/status-bar.R b/R/status-bar.R index 17acf3ad..8007ef45 100644 --- a/R/status-bar.R +++ b/R/status-bar.R @@ -316,6 +316,20 @@ cli_process_failed <- function( # ----------------------------------------------------------------------- +is_progress_multiline <- function() { + opt <- getOption("cli.progress_multiline", TRUE) + if (isTRUE(opt)) { + return(TRUE) + } + if (isFALSE(opt)) { + return(FALSE) + } + throw(cli_error( + "Invalid value for cli.progress_multiline option.", + "i" = "It must be `TRUE` or `FALSE`, but it is {.type {opt}}." + )) +} + clii_status <- function( app, id, @@ -380,10 +394,11 @@ clii_status_clear <- function(app, id, result, msg_done, msg_failed) { output <- get_real_output(app$output) is_ansi <- is_ansi_tty(output) - is_displayed <- if (is_ansi) TRUE else identical(app$status_bar_current, id) + is_multi <- is_ansi && is_progress_multiline() + is_displayed <- if (is_multi) TRUE else identical(app$status_bar_current, id) ## Clear/emit based on terminal type - if (is_ansi && length(app$status_bar) > 1L) { + if (is_multi && length(app$status_bar) > 1L) { ## Multi-bar ANSI: clear all, emit kept content, re-render remaining clii__clear_all_status_bars(app) if (app$status_bar[[id]]$keep) { @@ -522,8 +537,8 @@ clii__clear_all_status_bars <- function(app) { } clii__render_all_status_bars <- function(app) { - n <- length(app$status_bar) - if (n == 0L) { + full_n <- length(app$status_bar) + if (full_n == 0L) { return(invisible()) } @@ -532,6 +547,10 @@ clii__render_all_status_bars <- function(app) { return(invisible()) } + ## When multiline is disabled, render only the current bar as a single line. + is_multi <- is_progress_multiline() + n <- if (is_multi) full_n else 1L + prev <- app$status_bar_lines out <- "" @@ -540,14 +559,20 @@ clii__render_all_status_bars <- function(app) { out <- ansi_cuu(prev - 1L) } - ## Render each bar - for (i in seq_len(n)) { - content <- app$status_bar[[i]]$content - if (i < n) { - out <- paste0(out, "\r", content, ANSI_EL, "\n") - } else { - out <- paste0(out, "\r", content, ANSI_EL, "\r") + if (is_multi) { + ## Render each bar + for (i in seq_len(n)) { + content <- app$status_bar[[i]]$content + if (i < n) { + out <- paste0(out, "\r", content, ANSI_EL, "\n") + } else { + out <- paste0(out, "\r", content, ANSI_EL, "\r") + } } + } else { + cid <- app$status_bar_current %||% names(app$status_bar)[full_n] + content <- app$status_bar[[cid]]$content + out <- paste0(out, "\r", content, ANSI_EL, "\r") } ## If we previously had more lines, clear the leftover lines below @@ -569,12 +594,14 @@ clii__restore_status_bars <- function(app) { output <- get_real_output(app$output) if (is_ansi_tty(output)) { - if (length(app$status_bar) == 1L) { - content <- app$status_bar[[1]]$content + if (is_progress_multiline() && length(app$status_bar) > 1L) { + clii__render_all_status_bars(app) + } else { + cid <- app$status_bar_current %||% + names(app$status_bar)[length(app$status_bar)] + content <- app$status_bar[[cid]]$content app$cat(paste0(content, "\r")) app$status_bar_lines <- 1L - } else { - clii__render_all_status_bars(app) } } else if (is_dynamic_tty(output)) { cid <- app$status_bar_current diff --git a/R/tty.R b/R/tty.R index 8f2b61a7..b9b3c77b 100644 --- a/R/tty.R +++ b/R/tty.R @@ -160,14 +160,23 @@ ansi_cuu <- function(n) paste0(ANSI_ESC, n, "A") #' Detect if a stream support ANSI escape characters #' -#' We check that all of the following hold: -#' * The stream is a terminal. -#' * The platform is Unix. -#' * R is not running inside R.app (the macOS GUI). -#' * R is not running inside RStudio. -#' * R is not running inside Emacs. -#' * The terminal is not "dumb". -#' * `stream` is either the standard output or the standard error stream. +#' The detection mechanism is as follows: +#' 1. If the `cli.ansi` option is set to `TRUE`, `TRUE` is returned. +#' 1. If the `cli.ansi` option is set to `FALSE`, `FALSE` is returned. +#' 1. If the `R_CLI_ANSI` environment variable is set to `true` (case +#' insensitive), then `TRUE` is returned. +#' 1. If `R_CLI_ANSI` is not empty and set to `false` (case insensitive), +#' `FALSE` is returned. +#' 1. If R is running in the Positron console, then `TRUE` is returned, +#' with 'positron' added as a name. Positron does not currently support +#' hide/show cursor, scrolling regions, inserting and deleting lines +#' and the alternate screen buffer. +#' 1. Otherwise we autodetect, by checking that all of the following hold: +#' * The stream is a terminal, see [base::isatty()]. +#' * R is not running inside R.app (the macOS GUI). +#' * R is not running inside Emacs. +#' * The terminal is not "dumb". +#' * `stream` is either the standard output or the standard error stream. #' #' @inheritParams is_dynamic_tty #' @return `TRUE` or `FALSE`. @@ -181,20 +190,43 @@ is_ansi_tty <- function(stream = "auto") { stream <- get_real_output(stream) # Option takes precedence - opt <- getOption("cli.ansi") - if (isTRUE(opt)) { - return(TRUE) - } else if (identical(opt, FALSE)) { - return(FALSE) + if (!is.null(opt <- getOption("cli.ansi"))) { + if (isTRUE(opt)) { + return(TRUE) + } else if (identical(opt, FALSE)) { + return(FALSE) + } else { + throw(cli_error( + "Invalid value for option 'cli.ansi'", + "i" = "Expected TRUE or FALSE, got {.type {opt}}." + )) + } + } + + # Env var next + if ((x <- tolower(Sys.getenv("R_CLI_ANSI", ""))) != "") { + if (x %in% true_values) { + return(TRUE) + } else if (x %in% false_values) { + return(FALSE) + } else { + throw(cli_error( + "Invalid value for environment variable 'R_CLI_ANSI'", + "i" = "Expected one of {.val true} or {.val false}, got {x}." + )) + } + } + + if (.Platform$GUI == "Positron") { + return(c(positron = TRUE)) } - # RStudio is handled separately + # This does not currently happen, ever, but just in case if (rstudio$detect()[["ansi_tty"]] && is_stdx(stream)) { return(TRUE) } isatty(stream) && - .Platform$OS.type == "unix" && !is_rapp() && !is_emacs() && Sys.getenv("TERM", "") != "dumb" && diff --git a/R/utils.R b/R/utils.R index c83ff461..7e2cf22a 100644 --- a/R/utils.R +++ b/R/utils.R @@ -25,3 +25,6 @@ isFALSE <- function(x) { get_ppid <- function() { .Call(clic_getppid) } + +true_values <- c("true", "on", "yes", "y", "t", "1") +false_values <- c("false", "off", "no", "n", "f", "0") diff --git a/tests/testthat/_snaps/status-bar.md b/tests/testthat/_snaps/status-bar.md index 1ceff059..345e4bce 100644 --- a/tests/testthat/_snaps/status-bar.md +++ b/tests/testthat/_snaps/status-bar.md @@ -46,3 +46,39 @@ [5] "a: 2\n" "\rb: 1\033[K\r" [7] "\rb: 2\033[K\r" "\n" +# is_progress_multiline() rejects invalid values + + Code + is_progress_multiline() + Condition + Error: + ! ! Invalid value for cli.progress_multiline option. + i It must be `TRUE` or `FALSE`, but it is a string. + +--- + + Code + is_progress_multiline() + Condition + Error: + ! ! Invalid value for cli.progress_multiline option. + i It must be `TRUE` or `FALSE`, but it is `NA`. + +--- + + Code + is_progress_multiline() + Condition + Error: + ! ! Invalid value for cli.progress_multiline option. + i It must be `TRUE` or `FALSE`, but it is a logical vector. + +--- + + Code + is_progress_multiline() + Condition + Error: + ! ! Invalid value for cli.progress_multiline option. + i It must be `TRUE` or `FALSE`, but it is a number. + diff --git a/tests/testthat/_snaps/tty.md b/tests/testthat/_snaps/tty.md new file mode 100644 index 00000000..aaa18297 --- /dev/null +++ b/tests/testthat/_snaps/tty.md @@ -0,0 +1,36 @@ +# is_ansi_tty() rejects invalid cli.ansi option values + + Code + is_ansi_tty() + Condition + Error: + ! ! Invalid value for option 'cli.ansi' + i Expected TRUE or FALSE, got a string. + +--- + + Code + is_ansi_tty() + Condition + Error: + ! ! Invalid value for option 'cli.ansi' + i Expected TRUE or FALSE, got `NA`. + +--- + + Code + is_ansi_tty() + Condition + Error: + ! ! Invalid value for option 'cli.ansi' + i Expected TRUE or FALSE, got a number. + +# is_ansi_tty() rejects invalid R_CLI_ANSI values + + Code + is_ansi_tty() + Condition + Error: + ! ! Invalid value for environment variable 'R_CLI_ANSI' + i Expected one of "true" or "false", got maybe. + diff --git a/tests/testthat/test-status-bar.R b/tests/testthat/test-status-bar.R index 44b9c9b9..a6636ecb 100644 --- a/tests/testthat/test-status-bar.R +++ b/tests/testthat/test-status-bar.R @@ -634,3 +634,62 @@ test_that("multi-bar keep/done on ANSI", { msgs <- capture_cli_messages(fun()) expect_snapshot(msgs) }) + +test_that("cli.progress_multiline = FALSE forces single-line ANSI render", { + skip_if_not_installed("testthat", "3.1.2") + withr::local_options( + cli.dynamic = TRUE, + cli.ansi = TRUE, + cli.progress_show_after = 0, + cli.progress_multiline = FALSE + ) + + fun <- function() { + id1 <- cli_progress_bar( + "bar1", total = 3, type = "custom", + format = "bar1: {pb_current}", current = FALSE + ) + id2 <- cli_progress_bar( + "bar2", total = 3, type = "custom", + format = "bar2: {pb_current}", current = FALSE + ) + cli_progress_update(id = id1, force = TRUE) + cli_progress_update(id = id2, force = TRUE) + cli_progress_update(id = id1, force = TRUE) + cli_progress_done(id = id1) + cli_progress_done(id = id2) + } + + msgs <- capture_cli_messages(fun()) + ## No cursor-up escapes — multiline render is disabled. + expect_false(any(grepl("\033\\[\\d+A", msgs))) + ## Newlines between bars only happen in multi-line mode. + expect_false(any(grepl("\033\\[K\n", msgs))) +}) + +test_that("is_progress_multiline() defaults to TRUE", { + withr::local_options(cli.progress_multiline = NULL) + expect_true(is_progress_multiline()) +}) + +test_that("is_progress_multiline() honours TRUE/FALSE", { + withr::local_options(cli.progress_multiline = TRUE) + expect_true(is_progress_multiline()) + + withr::local_options(cli.progress_multiline = FALSE) + expect_false(is_progress_multiline()) +}) + +test_that("is_progress_multiline() rejects invalid values", { + withr::local_options(cli.progress_multiline = "yes") + expect_snapshot(error = TRUE, is_progress_multiline()) + + withr::local_options(cli.progress_multiline = NA) + expect_snapshot(error = TRUE, is_progress_multiline()) + + withr::local_options(cli.progress_multiline = c(TRUE, FALSE)) + expect_snapshot(error = TRUE, is_progress_multiline()) + + withr::local_options(cli.progress_multiline = 1) + expect_snapshot(error = TRUE, is_progress_multiline()) +}) diff --git a/tests/testthat/test-tty.R b/tests/testthat/test-tty.R new file mode 100644 index 00000000..1c5715d3 --- /dev/null +++ b/tests/testthat/test-tty.R @@ -0,0 +1,54 @@ +test_that("is_ansi_tty() honours cli.ansi option", { + withr::with_options(list(cli.ansi = TRUE), { + expect_true(is_ansi_tty()) + }) + withr::with_options(list(cli.ansi = FALSE), { + expect_false(is_ansi_tty()) + }) +}) + +test_that("is_ansi_tty() rejects invalid cli.ansi option values", { + withr::with_options(list(cli.ansi = "yes"), { + expect_snapshot(error = TRUE, is_ansi_tty()) + }) + withr::with_options(list(cli.ansi = NA), { + expect_snapshot(error = TRUE, is_ansi_tty()) + }) + withr::with_options(list(cli.ansi = 1), { + expect_snapshot(error = TRUE, is_ansi_tty()) + }) +}) + +test_that("is_ansi_tty() honours R_CLI_ANSI env var", { + withr::local_options(cli.ansi = NULL) + + for (val in c("true", "TRUE", "True", "on", "yes", "y", "t", "1")) { + withr::with_envvar(c(R_CLI_ANSI = val), { + expect_true(is_ansi_tty(), info = val) + }) + } + + for (val in c("false", "FALSE", "False", "off", "no", "n", "f", "0")) { + withr::with_envvar(c(R_CLI_ANSI = val), { + expect_false(is_ansi_tty(), info = val) + }) + } +}) + +test_that("is_ansi_tty() rejects invalid R_CLI_ANSI values", { + withr::local_options(cli.ansi = NULL) + withr::local_envvar(R_CLI_ANSI = "maybe") + expect_snapshot(error = TRUE, is_ansi_tty()) +}) + +test_that("cli.ansi option takes precedence over R_CLI_ANSI", { + withr::local_envvar(R_CLI_ANSI = "false") + withr::with_options(list(cli.ansi = TRUE), { + expect_true(is_ansi_tty()) + }) + + withr::local_envvar(R_CLI_ANSI = "true") + withr::with_options(list(cli.ansi = FALSE), { + expect_false(is_ansi_tty()) + }) +}) diff --git a/vignettes/cli-config-user.Rmd b/vignettes/cli-config-user.Rmd index ea8d3149..168a9d8f 100644 --- a/vignettes/cli-config-user.Rmd +++ b/vignettes/cli-config-user.Rmd @@ -111,6 +111,13 @@ Set this environment variable to `light` or `dark` to indicate dark mode in Emacs. Once https://github.com/emacs-ess/ESS/pull/1178 is merged, ESS will set this automatically. +### `R_CLI_ANSI` + +Set to `true` (case insensitive) to assume a terminal that supports ANSI +control sequences. Set to `false` (case insensitive) to assume a non-ANSI +terminal. The `cli.ansi` option, if set, takes precedence. +See [is_ansi_tty()]. + ### `R_CLI_DYNAMIC` Set to `true`, `TRUE` or `True` to assume a dynamic terminal, that supports `\r`. @@ -126,9 +133,9 @@ See [num_ansi_colors()]. ### `cli.ansi` -Set to `true`, `TRUE` or `True` to assume a terminal that supports ANSI -control sequences. -Set to anything else to assume a non-ANSI terminal. +Set to `TRUE` to assume a terminal that supports ANSI control sequences. +Set to `FALSE` to assume a non-ANSI terminal. This option takes precedence +over the `R_CLI_ANSI` environment variable. See [is_ansi_tty()]. ### `cli.condition_unicode_bullets` @@ -261,6 +268,14 @@ Progress handlers to force, ignoring handlers set in `cli.progress_handlers` and `cli.progress_handlers_force`. See [cli_progress_builtin_handlers()]. +### `cli.progress_multiline` + +Whether to render multiple concurrent progress bars on separate lines on +ANSI-capable terminals. Defaults to `TRUE`. Set to `FALSE` to show only the +most recently updated bar on a single line. Has no effect on non-ANSI +terminals, which always show a single bar. +See [is_ansi_tty()] and [cli_progress_bar()]. + ### `cli.progress_say_args` Command line arguments for the `say` progress handlers. From 00436a4725a7c7efb9091e9b79a76e20df2c0956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 20 May 2026 14:04:00 +0200 Subject: [PATCH 9/9] Fix test case on Windows On Windows a subprocess will have `is_ansi_tty() = TRUE` now if the main process is running in a terminal. That's the price for supporting ANSI constrol sequences on Windows. We'll see if we need an update for this later. --- tests/testthat/test-utf8.R | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/testthat/test-utf8.R b/tests/testthat/test-utf8.R index 06120415..17d9cf27 100644 --- a/tests/testthat/test-utf8.R +++ b/tests/testthat/test-utf8.R @@ -15,6 +15,7 @@ test_that("UTF-8 output on Windows", { options(cli.num_colors = 1) options(cli.width = 70) options(cli.dynamic = FALSE) + options(cli.ansi = FALSE) Sys.setenv(RSTUDIO = NA) s1 <- "\u30DE\u30EB\u30C1\u30D0\u30A4\u30C8\u306E\u30BF\u30A4\u30C8\u30EB"