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!("程序结束,恢复默认颜色");
}

特性

  1. 全局颜色控制
  2. 支持嵌套颜色设置
  3. 线程安全
  4. 轻量级(仅5.82 KiB)

许可证

该库采用双重许可:

  • MIT
  • Apache 2.0

维护者


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

注意事项

  1. 在Windows上可能需要启用ANSI支持
  2. 某些终端可能不支持所有颜色和样式
  3. 使用后记得重置颜色,避免影响后续输出
  4. 对于复杂应用,考虑使用with_color确保颜色作用域

这个库非常适合需要丰富终端输出的CLI工具,可以让你的应用程序更加美观和专业。

回到顶部