Rust终端颜色控制库clicolors-control的使用:跨平台ANSI颜色输出与终端样式管理
use clicolors_control::{set_colors_enabled, colors_enabled, set_auto_colors, reset_colors};
fn main() {
// 检查当前是否启用了颜色输出
if colors_enabled() {
println!("颜色输出已启用");
} else {
println!("颜色输出未启用");
}
// 手动启用颜色输出
set_colors_enabled(true);
// 打印带颜色的文本
println!("\x1b[31m这是红色文本\x1b[0m");
println!("\x1b[32m这是绿色文本\x1b[0m");
println!("\x1b[34m这是蓝色文本\x1b[0m");
// 设置自动检测颜色支持
set_auto_colors(true);
// 重置所有颜色设置
reset_colors();
// 再次检查颜色状态
match colors_enabled() {
true => println!("颜色输出当前已启用"),
false => println!("颜色输出当前已禁用"),
}
}
以下是一个更完整的示例demo,展示clicolors-control库的进阶用法:
use clicolors_control::*;
fn main() {
// 初始化颜色设置(自动检测终端支持)
init_color_support();
// 创建样式构建器
let mut style = StyleBuilder::new();
// 设置文本颜色和背景色
style.color(Color::Red)
.background(Color::White)
.bold(true);
// 应用样式并打印文本
println!("{}", style.apply("这是带样式的文本"));
// 打印不同颜色和样式的文本
println!(
"{} {} {}",
Color::Green.paint("绿色文本"),
Style::new().underline().apply("下划线文本"),
Color::Blue.bold().paint("蓝色加粗文本")
);
// 禁用颜色输出
set_colors_enabled(false);
println!("颜色禁用后: {}", Color::Yellow.paint("这不会显示颜色"));
// 重新启用颜色
set_colors_enabled(true);
// 打印所有可用颜色
println!("所有基本颜色:");
for color in Color::iter() {
print!("{} ", color.paint(format!("{:?}", color)));
}
println!();
// 重置终端颜色
reset_colors();
println!("颜色已重置为默认值");
}
这个完整示例展示了:
- 初始化颜色支持
- 使用StyleBuilder构建复杂样式
- 直接使用Color枚举设置颜色
- 组合多种文本样式
- 遍历所有可用颜色
- 动态启用/禁用颜色输出
- 重置终端颜色状态
该库支持所有标准ANSI颜色代码,并会自动处理Windows平台上的颜色转换,确保跨平台兼容性。
1 回复
Rust终端颜色控制库clicolors-control
使用指南
clicolors-control
是一个Rust库,用于跨平台的终端颜色输出和样式管理,支持ANSI颜色代码。
基本功能
- 跨平台支持(Windows/macOS/Linux)
- 检测终端颜色支持能力
- 启用/禁用颜色输出
- 自动处理不同平台的ANSI转义序列
安装
在Cargo.toml
中添加依赖:
[dependencies]
clicolors-control = "1.0"
基本用法
1. 检查颜色支持
use clicolors_control::{colors_enabled, set_colors_enabled};
fn main() {
// 检查当前是否启用了颜色
println!("Colors enabled: {}", colors_enabled());
// 手动启用颜色
set_colors_enabled(true);
// 再次检查
println!("Colors now enabled: {}", colors_enabled());
}
2. 输出彩色文本
use clicolors_control::set_colors_enabled;
fn main() {
// 确保颜色已启用
set_colors_enabled(true);
// 输出彩色文本
println!("\x1b[31mThis is red text\x1b[0m");
println!("\x1b[32;1mThis is bold green text\x1b[0m");
println!("\x1b[44;37mThis is white text on blue background\x1b[0m");
}
3. 自动检测并处理颜色
use clicolors_control::{colors_enabled, set_colors_enabled};
fn color_print(text: &str, color_code: &str) {
if colors_enabled() {
println!("\x1b[{}m{}\x1b[0m", color_code, text);
} else {
println!("{}", text);
}
}
fn main() {
// 根据环境自动决定是否启用颜色
set_colors_enabled(clicolors_control::should_attempt_colors());
color_print("Error message", "31;1"); // 红色粗体
color_print("Success message", "32"); // 绿色
color_print("Warning message", "33"); // 黄色
}
高级用法
1. 强制启用/禁用颜色
use clicolors_control::{force_colors, force_no_colors};
fn main() {
// 强制启用颜色,即使终端不支持
force_colors();
// 强制禁用颜色
force_no_colors();
}
2. 创建颜色辅助函数
use clicolors_control::set_colors_enabled;
macro_rules! colorize {
($text:expr, $code:expr) => {
format!("\x1b[{}m{}\x1b[0m", $code, $text)
};
}
fn main() {
set_colors_enabled(true);
println!("{}", colorize!("Red text", "31"));
println!("{}", colorize!("Blue background", "44"));
println!("{}", colorize!("Bold cyan", "36;1"));
}
颜色代码参考
常用ANSI颜色代码:
-
文本颜色:
- 30: 黑色
- 31: 红色
- 32: 绿色
- 33: 黄色
- 34: 蓝色
- 35: 紫色
- 36: 青色
- 37: 白色
-
背景颜色:
- 40: 黑色背景
- 41: 红色背景
- 42: 绿色背景
- 43: 黄色背景
- 44: 蓝色背景
- 45: 紫色背景
- 46: 青色背景
- 47: 白色背景
-
样式:
- 0: 重置所有属性
- 1: 粗体/高亮
- 2: 暗淡
- 3: 斜体
- 4: 下划线
- 5: 闪烁
- 7: 反显
- 8: 隐藏
- 9: 删除线
可以组合使用,用分号分隔,例如:"31;1;4"表示红色、粗体、带下划线。
注意事项
- 在Windows上可能需要启用虚拟终端支持(Windows 10+原生支持)
- 始终记得在彩色文本后重置属性(使用
\x1b[0m
) - 使用
colors_enabled()
检查颜色是否真的可用 - 考虑提供无颜色回退方案,以便在不支持颜色的终端上正常显示
完整示例代码
use clicolors_control::{colors_enabled, set_colors_enabled, force_colors, force_no_colors};
// 彩色打印函数
fn colored_print(text: &str, color: u8, bold: bool, underline: bool) {
if colors_enabled() {
let mut code = color.to_string();
if bold { code.push_str(";1"); }
if underline { code.push_str(";4"); }
println!("\x1b[{}m{}\x1b[0m", code, text);
} else {
println!("{}", text);
}
}
fn main() {
// 自动检测颜色支持
set_colors_enabled(clicolors_control::should_attempt_colors());
// 打印测试文本
colored_print("这是错误信息", 31, true, false); // 红色粗体
colored_print("这是成功信息", 32, false, true); // 绿色带下划线
colored_print("这是警告信息", 33, false, false); // 黄色
// 强制模式演示
force_no_colors();
println!("\n强制禁用颜色后:");
colored_print("这段文字不会有颜色", 34, true, false);
force_colors();
println!("\n强制启用颜色后:");
colored_print("这段文字会有颜色", 35, false, true);
// 重置颜色状态
set_colors_enabled(clicolors_control::should_attempt_colors());
}