#no-color #terminal #tty #color

color-nope

支持禁用终端颜色的标准选项

4 个版本 (重大更新)

0.4.0 2022年10月30日
0.3.0 2022年10月29日
0.2.0 2022年10月29日
0.1.0 2022年10月29日

命令行界面 中排名 #713

MIT 许可证

9KB
91

Color nope

GitHub Workflow Status GitHub Crates.io docs.rs

颜色?不。不,不,不。

支持禁用终端颜色的标准选项。

遵循 命令行界面指南,实现了 NO_COLOR 标准。

为什么

不同的库以自己的方式做这件事,通常会访问全局状态(例如环境变量),有时假设输出总是发送到 stdout。

我希望得到什么

  1. 支持 NO_COLOR

    这似乎是一个合理的标准。

  2. 能够独立禁用 stdout 和 stderr 的颜色。

    有时一个可能连接到 tty,而另一个可能被重定向到文件(例如)。

  3. 为了将访问全局状态(例如环境变量)仅限于我的应用程序(不在库中)。

    我坚信,大部分情况下,库不应该触及全局状态。作为应用程序开发者,我应该能够决定我想使用哪些环境变量,并且应该能够将这些传递给库。

    在这种情况下,如果我使用两个库来控制颜色,其中一个使用 NO_COLOR,而另一个使用 CLICOLOR,那么除非我能重新控制,否则我会很无助。

示例

使用 from_env() 便利函数

use color_nope::{ColorNope, Stream};

let enable_color = ColorNope::from_env().enable_color_for(Stream::Stdout);

println!("{enable_color}");

或通过传递自己的值

use color_nope::{ColorNope, Stream, Force};

let enable_color = ColorNope::new(
    std::env::var_os("TERM"),
    std::env::var_os("NO_COLOR"),
    if std::env::args_os().any(|a| a == "--no-color") {
        Some(Force::Off)
    } else {
        None
    },
)
.enable_color_for(Stream::Stdout);

println!("{enable_color}");

依赖项

~225KB