Draw a banner-like box in the console
Usage
list_border_styles()
boxx(
label,
header = "",
footer = "",
border_style = "single",
padding = 1,
margin = 0,
float = c("left", "center", "right"),
col = NULL,
background_col = NULL,
border_col = col,
align = c("left", "center", "right"),
width = console_width()
)
Arguments
- label
Label to show, a character vector. Each element will be in a new line. You can color it using the
col_*
,bg_*
andstyle_*
functions, see ANSI styles and the examples below.- header
Text to show on top border of the box. If too long, it will be cut.
- footer
Text to show on the bottom border of the box. If too long, it will be cut.
- border_style
String that specifies the border style.
list_border_styles
lists all current styles.- padding
Padding within the box. Either an integer vector of four numbers (bottom, left, top, right), or a single number
x
, which is interpreted asc(x, 3*x, x, 3*x)
.- margin
Margin around the box. Either an integer vector of four numbers (bottom, left, top, right), or a single number
x
, which is interpreted asc(x, 3*x, x, 3*x)
.- float
Whether to display the box on the
"left"
,"center"
, or the"right"
of the screen.- col
Color of text, and default border color. Either a style function (see ANSI styles) or a color name that is passed to
make_ansi_style()
.- background_col
Background color of the inside of the box. Either a style function (see ANSI styles), or a color name which will be used in
make_ansi_style()
to create a background style (i.e.bg = TRUE
is used).- border_col
Color of the border. Either a style function (see ANSI styles) or a color name that is passed to
make_ansi_style()
.- align
Alignment of the label within the box:
"left"
,"center"
, or"right"
.- width
Width of the screen, defaults to
console_width()
.
Details
Defaults
boxx("Hello there!")
#> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘
Change border style
boxx("Hello there!", border_style = "double")
#> ╔══════════════════╗ #> ║ ║ #> ║ Hello there! ║ #> ║ ║ #> ╚══════════════════╝
Padding
#> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘ #> ┌──────────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────────┘
Floating
boxx("Hello there!", padding = 1, float = "center")
boxx("Hello there!", padding = 1, float = "right")
#> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘ #> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘
Background color
boxx("Hello there!", padding = 1, background_col = "brown")
boxx("Hello there!", padding = 1, background_col = bg_red)
#> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘ #> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘
Border color
boxx("Hello there!", padding = 1, border_col = "green")
boxx("Hello there!", padding = 1, border_col = col_red)
#> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘ #> ┌──────────────────┐ #> │ │ #> │ Hello there! │ #> │ │ #> └──────────────────┘
Label alignment
boxx(c("Hi", "there", "you!"), padding = 1, align = "left")
boxx(c("Hi", "there", "you!"), padding = 1, align = "center")
boxx(c("Hi", "there", "you!"), padding = 1, align = "right")
#> ┌───────────┐ #> │ │ #> │ Hi │ #> │ there │ #> │ you! │ #> │ │ #> └───────────┘ #> ┌───────────┐ #> │ │ #> │ Hi │ #> │ there │ #> │ you! │ #> │ │ #> └───────────┘ #> ┌───────────┐ #> │ │ #> │ Hi │ #> │ there │ #> │ you! │ #> │ │ #> └───────────┘
A very customized box
star <- symbol$star
label <- c(paste(star, "Hello", star), " there!")
boxx(
col_white(label),
border_style="round",
padding = 1,
float = "center",
border_col = "tomato3",
background_col="darkolivegreen"
)
#> ╭───────────────╮ #> │ │ #> │ ★ Hello ★ │ #> │ there! │ #> │ │ #> ╰───────────────╯
About fonts and terminal settings
The boxes might or might not look great in your terminal, depending on the box style you use and the font the terminal uses. We found that the Menlo font looks nice in most terminals an also in Emacs.
RStudio currently has a line height greater than one for console output, which makes the boxes ugly.