Rust彩色终端输出宏库bunt-macros的使用,轻松实现ANSI颜色代码的跨平台文本格式化

Rust彩色终端输出宏库bunt-macros的使用,轻松实现ANSI颜色代码的跨平台文本格式化

安装

在项目目录中运行以下Cargo命令:

cargo add bunt-macros

或者将以下行添加到您的Cargo.toml中:

bunt-macros = "0.2.8"

基本使用示例

use bunt::println;

fn main() {
    // 红色文本
    println!("{[red]}这是红色文本{[/]}");
    
    // 绿色背景的白色文本
    println!("{[white+green.bold]}这是白色粗体文本,带绿色背景{[/]}");
    
    // 带下划线的黄色文本
    println!("{[yellow.underline]}这是带下划线的黄色文本{[/]}");
}

完整示例代码

use bunt::{println, print};

fn main() {
    // 简单颜色示例
    println!("{[red]}红色警告信息{[/]}");
    println!("{[green]}成功信息{[/]}");
    println!("{[blue]}提示信息{[/]}");

    // 组合样式示例
    println!("{[yellow.bold]}粗体黄色文本{[/]}");
    println!("{[magenta.italic]}斜体品红色文本{[/]}");
    println!("{[cyan.underline]}带下划线的青色文本{[/]}");
    println!("{[white+bold+red.bg]}白色粗体文本,红色背景{[/]}");

    // 使用print!宏
    print!("{[green]}正在处理... {[/]}");
    print!("{[blue]}完成!{[/]}\n");

    // 格式化字符串中使用
    let name = "Alice";
    let age = 25;
    println!("{[cyan]}姓名:{[/]} {[yellow]}{}{[/]}, {[cyan]}年龄:{[/]} {[green.bold]}{}{[/]}", name, age);

    // 嵌套样式示例
    println!("正常文本 {[red]}红色文本 {[blue.bold]}蓝色粗体文本{[/]} 仍然红色 {[/]} 返回正常");

    // 更多组合示例
    println!("{[black+white.bg]}黑底白字{[/]}");
    println!("{[red.underline+blink]}红色带下划线闪烁文本{[/]}");
    println!("{[green.bold+italic]}绿色粗斜体文本{[/]}");
}

可用颜色和样式

支持以下颜色和样式组合:

  • 前景色:black, red, green, yellow, blue, magenta, cyan, white
  • 背景色:在颜色后加.bg,如red.bg
  • 文本样式:bold(粗体), dim(暗淡), italic(斜体), underline(下划线), blink(闪烁), reverse(反色), hidden(隐藏)

跨平台支持

bunt-macros会自动检测平台是否支持ANSI颜色代码,在不支持的平台(如Windows cmd)上会自动禁用颜色输出,确保跨平台兼容性。

该库由Lukas Kalbertodt维护,采用MIT或Apache-2.0许可证。


1 回复

Rust彩色终端输出宏库bunt-macros使用指南

bunt-macros是一个Rust宏库,用于简化终端中的彩色文本输出,它提供了跨平台的ANSI颜色代码支持,让开发者可以轻松实现彩色终端输出而无需手动处理复杂的ANSI转义序列。

安装

Cargo.toml中添加依赖:

[dependencies]
bunt-macros = "0.2"

基本用法

1. 使用bunt!

use bunt_macros::bunt;

fn main() {
    // 红色文本
    bunt!(println!("{[red]}红色文本{/[]} 普通文本"));
    // 绿色文本
    bunt!(println!("{[green]}绿色文本{/[]} 普通文本"));
    // 蓝色文本
    bunt!(println!("{[blue]}蓝色文本{/[]} 普通文本"));
}

2. 样式组合

use bunt_macros::bunt;

fn main() {
    // 粗体红色文本
    bunt!(println!("{[red+bold]}粗体红色文本{/[]}"));
    // 带下划线的绿色文本
    bunt!(println!("{[green+underline]}带下划线的绿色文本{/[]}"));
    // 蓝色文本黄色背景
    bunt!(println!("{[blue+bg:yellow]}蓝色文本黄色背景{/[]}"));
}

可用样式选项

  • 颜色:black, red, green, yellow, blue, magenta, cyan, white
  • 背景色:bg:black, bg:red等(前缀bg:
  • 样式:bold, dim, italic, underline, blink, reverse, hidden, strikethrough

高级用法

1. 变量插值

use bunt_macros::bunt;

fn main() {
    let name = "Rust";
    // 使用变量插值输出绿色文本
    bunt!(println!("Hello, {[green]}{}{[/]}!", name));
}

2. 嵌套样式

use bunt_macros::bunt;

fn main() {
    // 嵌套样式:蓝色文本中包含红色文本
    bunt!(println!(
        "{[blue]}蓝色文本中的{[red]}红色文本{/[blue]}继续蓝色文本{[/]}"
    ));
}

3. 条件样式

use bunt_macros::bunt;

fn main() {
    let success = true;
    // 根据条件显示不同颜色
    bunt!(println!(
        "操作结果: {[if success {green} else {red}]}{}{[/]}",
        if success { "成功" } else { "失败" }
    ));
}

注意事项

  1. bunt-macros会自动处理跨平台兼容性,在不支持ANSI颜色的终端上会优雅降级
  2. 使用{[/]}来重置所有样式
  3. 可以嵌套样式,但要注意正确关闭

完整示例

use bunt_macros::bunt;

fn main() {
    // 简单颜色示例
    bunt!(println!("{[red]}警告信息{[/]}"));
    bunt!(println!("{[green]}成功信息{[/]}"));
    
    // 组合样式示例
    bunt!(println!("{[yellow+bold+underline]}重要通知{[/]}"));
    
    // 背景色示例
    bunt!(println!("{[white+bg:blue]}白字蓝底{[/]}"));
    
    // 复杂综合示例
    let username = "Alice";
    let score = 95;
    bunt!(println!(
        "用户 {[cyan]}{}{[/]} 的得分是 {[bold+if score >= 90 {green} else {red}]}{}{[/]}",
        username, score
    ));
    
    // 多行文本示例
    bunt!(println!(
        "{[magenta]}第一行{/[]}\n{[cyan]}第二行{/[]}\n{[yellow]}第三行{/[]}"
    ));
    
    // 复杂嵌套示例
    bunt!(println!(
        "{[blue]}蓝色{[bg:white]}白底{[red+underline]}红色下划线{/[]}返回蓝色白底{/[]}返回纯蓝色{/[]}"
    ));
}

bunt-macros提供了一种简洁、类型安全的方式来处理终端颜色输出,相比直接使用ANSI转义序列更加易读和易维护。

回到顶部