Rust终端颜色与格式化库bunt的使用,bunt提供轻量级跨平台ANSI色彩输出和文本样式控制
Rust终端颜色与格式化库bunt的使用
bunt提供了一系列宏来轻松地向终端输出彩色和格式化的文本。它是基于termcolor的一个便利API。bunt使用procedural macros实现,但不依赖syn,编译速度较快。
最低支持的Rust版本:1.46.0
示例代码
// 样式标签会着色/格式化标签之间的文本
bunt::println!("I really like {$yellow}lemons{/$}! Like, {$blue+italic}a lot{/$}.");
// 要对单个参数进行样式设置,可以使用{[style]...}语法
let v = vec![1, 2, 3];
bunt::println!("Here is some data: {[green]:?}. {$bold}Length: {[cyan]}{/$}", v, v.len());
完整示例
use bunt::{print, println};
fn main() {
// 基本彩色输出
println!("{$red}红色文本{/$}");
println!("{$bg:blue}蓝色背景{/$}");
println!("{$bold+underline}粗体下划线{/$}");
// 格式化参数示例
let name = "Alice";
let age = 25;
println!("Hello, {[green]}, you are {[yellow]} years old!", name, age);
// 组合样式示例
println!("{$bg:magenta+bold}警告: {/$}{$red}危险操作{/$}");
// 打印不换行示例
print!("{$cyan}加载中...{/$}");
print!("{$green}完成!{/$}");
}
项目状态
这是一个年轻的项目,但作者已经在两个应用中使用。语法尚未最终确定,正在寻求社区反馈。
许可证
项目采用双许可证:
- Apache License, Version 2.0
- MIT license
安装
在项目目录中运行以下Cargo命令:
cargo add bunt
或在Cargo.toml中添加:
bunt = "0.2.8"
bunt提供了简单易用的终端文本格式化功能,特别适合需要彩色输出和样式控制的命令行工具开发。
1 回复
Rust终端颜色与格式化库bunt使用指南
bunt是一个轻量级的Rust库,用于跨平台的ANSI色彩输出和文本样式控制。它提供了简单直观的API来为终端输出添加颜色和样式。
安装
在Cargo.toml中添加依赖:
[dependencies]
bunt = "0.2"
基本用法
1. 简单文本格式化
use bunt::{print, println};
fn main() {
// 打印红色文字
println!("{$red}这是红色文字{/$}");
// 打印绿色背景的黄色文字
println!("{$yellow+bg:green}黄字绿背景{/$}");
// 组合样式
println!("{$bold+italic+red}粗体斜体红色文字{/$}");
}
2. 样式变量复用
use bunt::{style, println};
fn main() {
let error_style = style!("{red+bold}");
let success_style = style!("{green}");
println!("{[error_style]}错误: 文件未找到{/$}");
println!("{[success_style]}成功: 操作完成{/$}");
}
3. 格式化宏
use bunt::{print, println};
fn main() {
let name = "Alice";
let age = 25;
println!("{$blue}姓名: {name}{/$}, {$green}年龄: {age}{/$}");
// 也可以这样写
println!("{$blue}姓名: {}{/$}, {$green}年龄: {}{/$}", name, age);
}
可用样式选项
bunt支持以下样式:
- 颜色:
black
,red
,green
,yellow
,blue
,magenta
,cyan
,white
- 亮色:
light-black
,light-red
,light-green
,light-yellow
,light-blue
,light-magenta
,light-cyan
,light-white
- 背景色:
bg:black
,bg:red
,bg:green
等(与前景色相同) - 文本样式:
bold
,italic
,underline
,strikethrough
,dim
高级用法
1. 条件样式
use bunt::{println, style};
fn main() {
let value = 42;
let value_style = if value > 50 {
style!("{red}")
} else {
style!("{green}")
};
println!("数值: {[value_style]}{value}{/$}");
}
2. 禁用颜色
use bunt;
fn main() {
// 全局禁用颜色
bunt::set_enable(false);
// 即使有样式标记也不会显示颜色
bunt::println!("{$red}这不会显示为红色{/$}");
}
3. 自定义主题
use bunt::{define_style, println};
fn main() {
define_style!("error", "{red+bold}");
define_style!("warning", "{yellow}");
define_style!("info", "{blue}");
println!("{[error]}错误消息{/$}");
println!("{[warning]}警告消息{/$}");
println!("{[info]}信息消息{/$}");
}
完整示例demo
use bunt::{define_style, print, println, style};
fn main() {
// 1. 简单文本格式化示例
println!("\n=== 简单文本格式化 ===");
println!("{$red}红色文字示例{/$}");
println!("{$blue+underline}蓝色带下划线文字{/$}");
println!("{$bg:yellow+black}黑色文字黄色背景{/$}");
// 2. 样式复用示例
println!("\n=== 样式复用 ===");
let warning_style = style!("{bold+yellow}");
let header_style = style!("{underline+magenta}");
println!("{[header_style]}系统状态报告{/$}");
println!("{[warning_style]}警告: 磁盘空间不足{/$}");
// 3. 条件样式示例
println!("\n=== 条件样式 ===");
let scores = [75, 42, 90, 60];
for &score in &scores {
let score_style = if score >= 80 {
style!("{bold+green}")
} else if score >= 60 {
style!("{yellow}")
} else {
style!("{red}")
};
println!("分数: {[score_style]}{}{/$}", score);
}
// 4. 自定义主题示例
println!("\n=== 自定义主题 ===");
define_style!("success", "{bold+green}");
define_style!("highlight", "{bg:cyan+black}");
println!("{[success]}操作成功完成!{/$}");
println!("这是{[highlight]}高亮显示{/$}的重要信息");
// 5. 格式化宏示例
println!("\n=== 格式化宏 ===");
let product = "Rust编程书";
let price = 99.9;
println!(
"{$bold}产品: {}{/$}, {$green}价格: {:.2}元{/$}",
product, price
);
// 6. 禁用颜色示例
println!("\n=== 禁用颜色 ===");
bunt::set_enable(false);
println!("{$red}这行应该没有颜色{/$}");
bunt::set_enable(true); // 重新启用颜色
}
注意事项
- bunt会自动检测终端是否支持颜色输出,在不支持颜色的终端上会自动禁用样式
- 对于Windows平台,bunt会自动启用ANSI颜色支持(Windows 10+)
- 样式标记使用
{$...}
和{/$}
,或者{[style]}
和{/$}
语法
bunt是一个轻量级的选择,特别适合那些不需要复杂终端UI但需要基本颜色和样式支持的Rust应用程序。