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

bunt示例输出

完整示例

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); // 重新启用颜色
}

注意事项

  1. bunt会自动检测终端是否支持颜色输出,在不支持颜色的终端上会自动禁用样式
  2. 对于Windows平台,bunt会自动启用ANSI颜色支持(Windows 10+)
  3. 样式标记使用{$...}{/$},或者{[style]}{/$}语法

bunt是一个轻量级的选择,特别适合那些不需要复杂终端UI但需要基本颜色和样式支持的Rust应用程序。

回到顶部