Expand description
ansi_rgb
Colorful terminal text using ANSI escape sequences.
- Very simple API
- 3-, 4-, 8-, and 24-bit colors
- Colors all the formatting traits
- Easy to add your own color types
no_std
compliant
Full documentation:
Foreground colors
use ansi_rgb::{ Colorable, red };
println!("{}", "Hello, world!".fg(red()));
Output:
Hello, world!
Background colors
use ansi_rgb::{ Colorable, red };
println!("{}", "Hello, world!".bg(red()));
Output:
Hello, world!
Nesting
use ansi_rgb::{ Colorable, blue, green, red };
let formatted = format!(
"Hello, world! {}",
format!(
"{} is an interesting {}",
"This".fg(blue()),
"day".fg(red())
).bg(green())
);
println!("{}", formatted);
Output:
Hello, world! This is an interesting day
Anything formattable
use ansi_rgb::*;
#[derive(Debug)]
struct Foo(i32, i32);
let foo = Foo(1, 2);
println!("{:?}", foo.fg(green()));
Output:
Foo(1, 2)
3-bit colors
use ansi_rgb::{ Colorable, Color3 };
println!("{}", "Hello, world!".fg(Color3::RED).bg(Color3::BLACK));
Output:
Hello, world!
4-bit colors
use ansi_rgb::{ Colorable, Color4 };
println!("{}", "Hello, world!".fg(Color4::BRIGHT_RED).bg(Color4::BLACK));
Output:
Hello, world!
8-bit colors
use ansi_rgb::{ Colorable, Color8 };
println!("{}", "Hello, world!".fg(Color8::new(160)).bg(Color8::new(0)));
Output:
Hello, world!
24-bit colors
Built-in support for the rgb
crate.
[dependencies]
rgb = { version = "0.8", default-features = false }
use ansi_rgb::{ Colorable };
use rgb::RGB8;
let fg = RGB8::new(123, 231, 111);
let bg = RGB8::new(10, 100, 20);
println!("{}", "Yuck".fg(fg).bg(bg));
Output:
Yuck
Extending to other color types
If you have your own color type and you know how to turn it into ANSI escape
sequences then just implement FormatColor
:
use ansi_rgb::{ Canvas, Colorable, FormatColor };
use core::fmt;
enum FavoriteColors {
SkyBlue,
RocketPlumeYellow,
TitaniumGray
}
impl FormatColor for FavoriteColors {
fn prelude(&self, f: &mut fmt::Formatter, canvas: Canvas) -> fmt::Result {
let (r, g, b) = match self {
FavoriteColors::SkyBlue => (135, 206, 235),
FavoriteColors::RocketPlumeYellow => (255, 255, 0),
FavoriteColors::TitaniumGray => (86, 95, 107)
};
write!(
f,
"\x1B[{};2;{};{};{}m",
match canvas {
Canvas::Foreground => 38,
Canvas::Background => 48
},
r,
g,
b
)
}
}
println!(
"The sky is {}",
"blue".fg(FavoriteColors::SkyBlue)
);
Output:
The sky is blue
Features
default
includes 3-, 4-, 8-, and 24-bit colors and depends on the rgb
crate,
giving you the following things:
- Dependency on
rgb
crate - Implementation of
FormatColor
forrgb::RGB8
type Color3
enum and its implementation ofFormatColor
Color4
struct and its implementation ofFormatColor
Color8
struct and its implementation ofFormatColor
- Color functions (
red()
,orange()
, etc)
Windows users
You need to set your console mode. Otherwise you’ll get garbage like this:
�[48;2;159;114;0m �[0m
Structs
A 4-bit color type
An 8-bit color
Error type indicating an input argument was out of bounds
Something that will have a background color applied
Something that will have a foreground color applied
Enums
Traits
Adds a foreground or background color
Generates ANSI escape sequences using a specific color
Functions
Makes black
Makes blue
Makes blue magenta
Makes cyan
Makes cyan blue
Makes green
Makes green cyan
Makes magenta
Makes magenta pink
Makes orange
Makes red
Makes white
Makes yellow
Makes yellow green