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::pak("r-lib/crayon")
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 calleddim
, 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 calledgray
, 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 ' %+%
blue$underline$bold('with a blue substring') %+%
' that becomes green again!\n'
))
It is easy to define your own themes:
error <- red $ bold
warn <- magenta $ underline
note <- cyan
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.
ivory <- make_style("ivory")
bgMaroon <- make_style("maroon", bg = TRUE)
fancy <- combine_styles(ivory, bgMaroon)
cat(fancy("This will have some fancy colors"), "\n")
MIT @ Gábor Csárdi