Rust终端颜色控制库wincolor的使用,wincolor提供Windows平台下命令行文本的高效颜色与样式控制

Rust终端颜色控制库wincolor的使用

注意事项

此crate已终止维护并弃用。该crate已被合并到winapi-util crate中,winapi-utilconsole模块可以直接替代wincolor

基本示例

use wincolor::{Console, Color, Intense};

let mut con = Console::stdout().unwrap();
con.fg(Intense::Yes, Color::Cyan).unwrap();
println!("This text will be intense cyan.");
con.reset().unwrap();
println!("This text will be normal.");

完整示例

extern crate wincolor;

use wincolor::{Console, Color, Intense};

fn main() {
    // 获取标准输出控制台句柄
    let mut con = match Console::stdout() {
        Ok(con) => con,
        Err(e) => {
            eprintln!("获取控制台失败: {}", e);
            return;
        }
    };

    // 设置普通红色前景色
    if let Err(e) = con.fg(Intense::No, Color::Red) {
        eprintln!("设置颜色失败: {}", e);
        return;
    }
    println!("这段文字是红色的");

    // 设置绿色背景色
    if let Err(e) = con.bg(Intense::No, Color::Green) {
        eprintln!("设置背景色失败: {}", e);
        return;
    }
    println!("这段文字有绿色背景");

    // 设置亮蓝色前景色
    if let Err(e) = con.fg(Intense::Yes, Color::Blue) {
        eprintln!("设置高亮颜色失败: {}", e);
        return;
    }
    println!("这段文字是亮蓝色的");

    // 重置所有属性
    if let Err(e) = con.reset() {
        eprintln!("重置控制台失败: {}", e);
        return;
    }
    println!("恢复正常文字样式");
}

可用颜色选项

wincolor支持以下颜色常量:

  • Color::Black
  • Color::Blue
  • Color::Green
  • Color::Red
  • Color::Cyan
  • Color::Magenta
  • Color::Yellow
  • Color::White

可以通过Intense::YesIntense::No来控制是否使用高亮(明亮)颜色。


1 回复

Rust终端颜色控制库wincolor使用指南

wincolor是一个专门为Windows平台设计的Rust库,用于在命令行中控制文本颜色和样式。它提供了简单高效的API来改变控制台输出的外观。

基本功能

  • 设置前景色(文本颜色)
  • 设置背景色
  • 重置颜色到默认值
  • 支持基本的颜色集(黑色、红色、绿色、黄色、蓝色、洋红、青色、白色)

使用方法

首先在Cargo.toml中添加依赖:

[dependencies]
wincolor = "1.0"

基本示例

use wincolor::{Console, Color};

fn main() {
    // 获取标准输出控制台
    let mut con = Console::stdout().unwrap();
    
    // 设置红色文本
    con.fg(Color::Red).unwrap();
    println!("这是红色文本");
    
    // 设置绿色背景
    con.bg(Color::Green).unwrap();
    println!("红色文本绿色背景");
    
    // 重置颜色
    con.reset().unwrap();
    println!("恢复正常颜色");
}

更复杂的样式组合

use wincolor::{Console, Color};

fn main() {
    let mut con = Console::stdout().unwrap();
    
    // 蓝色背景,黄色文本
    con.bg(Color::Blue).unwrap();
    con.fg(Color::Yellow).unwrap();
    println!("警告信息!");
    
    // 重置颜色
    con.reset().unwrap();
}

便捷宏示例

wincolor还提供了宏来简化颜色设置:

use wincolor::{colorize, Color};

fn main() {
    // 使用宏设置红色文本
    colorize!(Color::Red, println!("错误: 文件未找到"));
    
    // 设置绿色文本蓝色背景
    colorize!(Color::Green, Color::Blue, println!("成功: 操作完成"));
}

注意事项

  1. wincolor仅适用于Windows平台,在其他操作系统上会编译但不会有任何效果
  2. 颜色设置会影响之后的所有输出,直到调用reset()或程序结束
  3. 某些旧版Windows控制台可能不支持所有颜色

高级用法

对于需要更精细控制的情况,可以直接使用Windows API:

use wincolor::{Console, Color, Intense};

fn main() {
    let mut con = Console::stdout().unwrap();
    
    // 设置高亮(明亮)红色
    con.fg(Intense::Yes(Color::Red)).unwrap();
    println!("重要警告!");
    
    con.reset().unwrap();
}

完整示例代码

下面是一个完整的wincolor使用示例,展示了各种颜色组合和样式设置:

use wincolor::{Console, Color, Intense, colorize};

fn main() {
    // 基本颜色设置示例
    let mut con = Console::stdout().unwrap();
    
    // 红色文本
    con.fg(Color::Red).unwrap();
    println!("错误信息 - 红色文本");
    
    // 绿色背景
    con.bg(Color::Green).unwrap();
    println!("警告信息 - 红色文本绿色背景");
    
    // 重置颜色
    con.reset().unwrap();
    println!("正常信息 - 默认颜色");
    
    // 使用宏设置颜色
    colorize!(Color::Blue, println!("提示信息 - 蓝色文本"));
    colorize!(Color::Yellow, Color::Magenta, println!("特殊信息 - 黄色文本洋红背景"));
    
    // 高级用法 - 高亮颜色
    con.fg(Intense::Yes(Color::Cyan)).unwrap();
    println!("高亮信息 - 明亮的青色文本");
    
    // 重置所有样式
    con.reset().unwrap();
    
    // 复杂样式组合
    con.fg(Color::White).unwrap();
    con.bg(Color::Red).unwrap();
    println!("紧急错误 - 白色文本红色背景");
    
    // 记得最后重置颜色
    con.reset().unwrap();
}

wincolor是Windows平台下简单高效的终端颜色控制解决方案,特别适合需要区分不同输出类型的命令行工具开发。

回到顶部