Rust终端颜色控制库concolor-override的使用,轻松自定义和覆盖终端输出颜色样式
Rust终端颜色控制库concolor-override的使用,轻松自定义和覆盖终端输出颜色样式
简介
concolor-override是一个用于全局覆盖颜色控制的Rust库,它可以帮助开发者轻松自定义和修改终端输出的颜色样式。
安装
在项目目录中运行以下Cargo命令:
cargo add concolor-override
或者在Cargo.toml中添加:
concolor-override = "1.1.0"
使用示例
下面是一个完整的使用示例,展示如何使用concolor-override来自定义终端输出颜色:
use concolor_override::{Color, set_color_override};
fn main() {
// 设置全局颜色覆盖
set_color_override(Color::Red);
println!("这段文字将被显示为红色");
// 可以嵌套设置不同的颜色
{
let _guard = set_color_override(Color::Green);
println!("这段文字将被显示为绿色");
// 内部可以再次覆盖
{
let _guard = set_color_override(Color::Blue);
println!("这段文字将被显示为蓝色");
}
println!("这段文字恢复为绿色");
}
println!("这段文字恢复为红色");
}
完整示例代码
use concolor_override::{Color, set_color_override};
fn main() {
// 设置初始颜色为红色
set_color_override(Color::Red);
println!("欢迎使用concolor-override库 - 红色文字");
// 嵌套绿色区块
{
let _guard = set_color_override(Color::Green);
println!("绿色区块开始");
// 在绿色区块中嵌套蓝色
{
let _guard = set_color_override(Color::Blue);
println!("蓝色嵌套文字");
// 在蓝色中嵌套黄色
{
let _guard = set_color_override(Color::Yellow);
println!("黄色嵌套文字");
} // 自动恢复为蓝色
println!("恢复为蓝色");
} // 自动恢复为绿色
println!("恢复为绿色");
} // 自动恢复为红色
println!("最终恢复为红色");
// 演示其他颜色
{
let _guard = set_color_override(Color::Cyan);
println!("青色文字");
let _guard = set_color_override(Color::Magenta);
println!("品红色文字");
}
println!("程序结束,恢复默认颜色");
}
特性
- 全局颜色控制
- 支持嵌套颜色设置
- 线程安全
- 轻量级(仅5.82 KiB)
许可证
该库采用双重许可:
- MIT
- Apache 2.0
维护者
- Ed Page (@epage)
1 回复
Rust终端颜色控制库concolor-override使用指南
介绍
concolor-override
是一个Rust库,用于在终端应用程序中轻松自定义和覆盖输出颜色样式。它提供了一种简单的方式来控制终端文本的颜色、背景色和样式,特别适合需要定制化终端输出的CLI工具开发。
主要特性
- 支持16种基本颜色和RGB颜色
- 可以设置文本颜色、背景色和文本样式(粗体、斜体等)
- 支持颜色覆盖和重置
- 跨平台兼容(Windows/macOS/Linux)
使用方法
添加依赖
首先在Cargo.toml
中添加依赖:
[dependencies]
concolor-override = "0.1"
基本示例
use concolor_override::{Color, set_color};
fn main() {
// 设置红色文本
set_color(Color::Red);
println!("这是红色文本");
// 重置颜色
set_color(Color::Reset);
println!("这是默认颜色");
// 设置绿色背景
set_color(Color::BgGreen);
println!("这是绿色背景");
// 组合使用
set_color(Color::Blue | Color::BgYellow | Color::Bold);
println!("蓝色粗体文字,黄色背景");
}
RGB颜色支持
use concolor_override::{rgb, set_color};
fn main() {
// 使用RGB值设置文本颜色
set_color(rgb(255, 0, 128));
println!("粉色文本");
// 使用RGB值设置背景色
set_color(rgb(0, 0, 0).bg());
println!("黑色背景上的默认文本");
// 同时设置文本和背景
set_color(rgb(255, 255, 255) | rgb(0, 0, 128).bg());
println!("白色文本,深蓝背景");
}
样式控制
use concolor_override::{Color, Style, set_color};
fn main() {
// 设置粗体
set_color(Color::Bold);
println!("粗体文本");
// 设置斜体
set_color(Color::Italic);
println!("斜体文本");
// 组合样式
set_color(Style::Bold | Style::Underline | Color::Magenta);
println!("加粗、下划线的洋红色文本");
}
作用域内颜色覆盖
use concolor_override::{with_color, Color};
fn main() {
println!("正常颜色");
with_color(Color::Cyan, || {
println!("这段文本是青色的");
with_color(Color::BgRed, || {
println!("这段文本是青色加红色背景");
});
});
println!("又回到正常颜色");
}
高级用法
自定义主题
use concolor_override::{Color, set_color};
struct Theme {
error: Color,
warning: Color,
success: Color,
}
impl Theme {
fn new() -> Self {
Self {
error: Color::Red | Color::Bold,
warning: Color::Yellow,
success: Color::Green,
}
}
}
fn main() {
let theme = Theme::new();
set_color(theme.error);
println!("错误信息");
set_color(theme.warning);
println!("警告信息");
set_color(theme.success);
println!("成功信息");
}
条件颜色设置
use concolor_override::{Color, set_color};
fn log_message(level: &str, message: &str) {
match level {
"ERROR" => set_color(Color::Red | Color::Bold),
"WARN" => set_color(Color::Yellow),
"INFO" => set_color(Color::Blue),
"SUCCESS" => set_color(Color::Green),
_ => set_color(Color::Reset),
}
println!("[{}] {}", level, message);
set_color(Color::Reset);
}
fn main() {
log_message("ERROR", "发生了一个严重错误");
log_message("WARN", "这是一个警告");
log_message("INFO", "这是一条信息");
log_message("SUCCESS", "操作成功完成");
}
完整示例demo
下面是一个结合了多种功能的完整示例:
use concolor_override::{Color, Style, rgb, set_color, with_color};
// 自定义日志级别
enum LogLevel {
Error,
Warning,
Info,
Success,
}
// 自定义主题
struct Theme {
error: Color,
warning: Color,
info: Color,
success: Color,
}
impl Theme {
fn new() -> Self {
Self {
error: Color::Red | Color::Bold,
warning: Color::Yellow | Style::Italic,
info: rgb(100, 149, 237), // 矢车菊蓝
success: rgb(50, 205, 50), // 石灰绿
}
}
}
fn main() {
let theme = Theme::new();
// 演示基本颜色设置
println!("--- 基本颜色演示 ---");
set_color(Color::Magenta);
println!("紫色文本");
set_color(Color::Reset);
// 演示RGB颜色
println!("\n--- RGB颜色演示 ---");
set_color(rgb(255, 165, 0)); // 橙色
println!("橙色文本");
set_color(rgb(70, 130, 180).bg()); // 钢蓝色背景
println!("钢蓝色背景上的文本");
set_color(Color::Reset);
// 演示样式组合
println!("\n--- 样式组合演示 ---");
set_color(Style::Bold | Style::Underline | rgb(138, 43, 226)); // 紫罗兰色
println!("粗体、下划线的紫罗兰色文本");
set_color(Color::Reset);
// 演示作用域内颜色
println!("\n--- 作用域颜色演示 ---");
with_color(Color::Cyan, || {
println!("这段文本是青色的");
with_color(Color::BgBlack, || {
println!("青色文本,黑色背景");
});
});
// 演示自定义主题
println!("\n--- 自定义主题演示 ---");
with_color(theme.error, || {
println!("错误信息 - 使用了主题颜色");
});
with_color(theme.warning, || {
println!("警告信息 - 使用了主题颜色");
});
// 演示条件颜色设置
println!("\n--- 条件颜色设置演示 ---");
log_message(LogLevel::Error, "这是一个错误消息");
log_message(LogLevel::Success, "操作成功完成");
}
fn log_message(level: LogLevel, message: &str) {
match level {
LogLevel::Error => set_color(Color::Red | Color::Bold),
LogLevel::Warning => set_color(Color::Yellow),
LogLevel::Info => set_color(Color::Blue),
LogLevel::Success => set_color(Color::Green),
}
println!("[{}] {}", format!("{:?}", level), message);
set_color(Color::Reset);
}
注意事项
- 在Windows上可能需要启用ANSI支持
- 某些终端可能不支持所有颜色和样式
- 使用后记得重置颜色,避免影响后续输出
- 对于复杂应用,考虑使用
with_color
确保颜色作用域
这个库非常适合需要丰富终端输出的CLI工具,可以让你的应用程序更加美观和专业。