Please use cli for new projects.
crayon is still supported and will receive important bug fixes, but no new features.
Stylish terminal output in R
With crayon it is easy to add color to terminal output, create styles for notes, warnings, errors; and combine styles.
ANSI color support is automatically detected and used. Crayon was largely inspired by chalk.
Stable version:
install.packages("crayon")
Development version:
::pak("r-lib/crayon") pak
Crayon defines several styles that can be combined. Each style in the list has a corresponding function with the same name.
reset
bold
blurred
(usually called dim
, renamed to
avoid name clash)italic
(not widely supported)underline
inverse
hidden
strikethrough
(not widely supported)black
red
green
yellow
blue
magenta
cyan
white
silver
(usually called gray
, renamed to
avoid name clash)bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite
The styling functions take any number of character vectors as arguments, and they concatenate and style them:
library(crayon)
cat(blue("Hello", "world!\n"))
Crayon defines the %+%
string concatenation operator to
make it easy to assemble strings with different styles.
cat("... to highlight the " %+% red("search term") %+% " in a block of text\n")
Styles can be combined using the $
operator:
cat(yellow$bgMagenta$bold('Hello world!\n'))
Styles can also be nested, and then inner style takes precedence:
cat(green(
'I am a green line ' %+%
$underline$bold('with a blue substring') %+%
blue' that becomes green again!\n'
))
It is easy to define your own themes:
<- red $ bold
error <- magenta $ underline
warn <- cyan
note cat(error("Error: subscript out of bounds!\n"))
cat(warn("Warning: shorter argument was recycled.\n"))
cat(note("Note: no such directory.\n"))
Most modern terminals support the ANSI standard for 256 colors, and
you can define new styles that make use of them. The
make_style
function defines a new style. It can handle R’s
built in color names (see the output of colors()
) as well
as RGB specifications via the rgb()
function. It
automatically chooses the ANSI colors that are closest to the specified
R and RGB colors, and it also has a fallback to terminals with 8 ANSI
colors only.
<- make_style("ivory")
ivory <- make_style("maroon", bg = TRUE)
bgMaroon <- combine_styles(ivory, bgMaroon)
fancy cat(fancy("This will have some fancy colors"), "\n")
MIT @ Gábor Csárdi