#终端文本 #ANSI 颜色 #颜色 #终端颜色 #ANSI #终端 #文本颜色

无 std ansi_rgb

使用 ANSI 转义序列进行彩色终端文本

6 个版本

0.3.2-alpha2022年6月25日
0.3.1 2022年6月24日
0.2.0 2019年7月18日
0.1.0 2019年7月16日

#400命令行界面

Download history 1397/week @ 2024-04-14 1354/week @ 2024-04-21 1499/week @ 2024-04-28 1765/week @ 2024-05-05 1718/week @ 2024-05-12 1555/week @ 2024-05-19 1361/week @ 2024-05-26 1367/week @ 2024-06-02 1524/week @ 2024-06-09 1186/week @ 2024-06-16 1303/week @ 2024-06-23 1287/week @ 2024-06-30 1150/week @ 2024-07-07 854/week @ 2024-07-14 730/week @ 2024-07-21 762/week @ 2024-07-28

3,620 每月下载量
用于 6 个 crate(2 个直接使用)

MIT 许可证

17KB
248

ansi_rgb

使用 ANSI 转义序列进行彩色终端文本。

  • 非常简单的 API
  • 3 位、4 位、8 位和 24 位颜色
  • 着色所有 格式化特质
  • 轻松添加自己的颜色类型
  • no_std 兼容

crates.io badge
docs.rs badge
Downloads badge

完整文档

https://docs.rs/ansi_rgb


lib.rs:

前景颜色

use ansi_rgb::{ Colorable, red };

println!("{}", "Hello, world!".fg(red()));

输出

Hello,world!

背景颜色

use ansi_rgb::{ Colorable, red };

println!("{}", "Hello, world!".bg(red()));

输出

Hello,world!

嵌套

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);

输出

Hello, world! This is an interesting day

任何可格式化的内容

use ansi_rgb::*;

#[derive(Debug)]
struct Foo(i32, i32);

let foo = Foo(1, 2);
println!("{:?}", foo.fg(green()));

输出

Foo(1, 2)

3 位颜色

use ansi_rgb::{ Colorable, Color3 };

println!("{}", "Hello, world!".fg(Color3::RED).bg(Color3::BLACK));

输出

Hello,world!

4 位颜色

use ansi_rgb::{ Colorable, Color4 };

println!("{}", "Hello, world!".fg(Color4::BRIGHT_RED).bg(Color4::BLACK));

输出

Hello,world!

8 位颜色

use ansi_rgb::{ Colorable, Color8 };

println!("{}", "Hello, world!".fg(Color8::new(160)).bg(Color8::new(0)));

输出

Hello,world!

24 位颜色

内置对 `rgb` crate 的支持。

# Cargo.toml
[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));

输出

Yuck

扩展到其他颜色类型

如果你有自己的颜色类型并且知道如何将其转换为 ANSI 转义序列,只需实现 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)
);

输出

天空是 蓝色

功能

default 包括 3 位、4 位、8 位和 24 位颜色,并依赖于 rgb crate,为你提供以下功能

  • 依赖于 rgb crate
  • rgb::RGB8 类型实现 FormatColor
  • Color3 枚举及其 FormatColor 实现
  • Color4 结构体及其 FormatColor 实现
  • Color8 结构体及其 FormatColor 实现
  • 颜色函数(red()orange() 等)

Windows 用户

你需要 设置你的控制台模式。否则你会得到像这样的垃圾

[48;2;159;114;0m �[0m

依赖项

~140KB