#ansi-colors #ansi #terminal-colors #color #terminal #cli #linux-macos

r3bl_ansi_color

Rust 包用于生成格式化的 ANSI 256 (8位) 和真彩色 (24位) 颜色输出到 stdout

14 个版本 (4 个破坏性更新)

0.6.9 2023 年 10 月 22 日
0.6.7 2023 年 9 月 12 日

#173命令行界面

Download history 3366/week @ 2024-04-08 3565/week @ 2024-04-15 3614/week @ 2024-04-22 4684/week @ 2024-04-29 4092/week @ 2024-05-06 3200/week @ 2024-05-13 3350/week @ 2024-05-20 3706/week @ 2024-05-27 2769/week @ 2024-06-03 3228/week @ 2024-06-10 3604/week @ 2024-06-17 4325/week @ 2024-06-24 3984/week @ 2024-07-01 4097/week @ 2024-07-08 2858/week @ 2024-07-15 2414/week @ 2024-07-22

每月 13,889 次下载
用于 12 个包 (5 个直接)

Apache-2.0

5MB
1K SLoC

Rust 1K SLoC // 0.1% comments Nushell 145 SLoC // 0.2% comments

r3bl_ansi_color 包

它做什么?

r3bl_ansi_color 包用于生成格式化的 ANSI 256 (8位) 和真彩色 (24位) 颜色输出到 stdout。在 macOS 上,默认的 Terminal.app 不支持真彩色,因此使用 ANSI 256 颜色。

此包通过启发式方法自行检测终端颜色功能。并且不使用其他包来执行此功能。

以下是各种操作系统上运行 main 示例的截图

Linux screenshot
在 Linux Tilix 上运行
Windows screenshot
在 Windows Terminal 上运行
macOS screenshot Terminal app
在 macOS Terminal 应用程序上运行(注意 ANSI 256 运行时检测)
macOS screenshot iTerm app
在 macOS iTerm 应用程序上运行(注意真彩色运行时检测)

如何使用它?

我们需要考虑的主要结构是 AnsiStyledText。它有两个字段

  • text - 要打印的文本。
  • style - 应用到文本的样式列表。

以下是一个示例。

AnsiStyledText {
    text: "Print a formatted (bold, italic, underline) string w/ ANSI color codes.",
    style: &[
        Style::Bold,
        Style::Italic,
        Style::Underline,
        Style::Foreground(Color::Rgb(50, 50, 50)),
        Style::Background(Color::Rgb(100, 200, 1)),
    ],
}
.println();

请查看 main 示例 以更好地了解如何使用此包。

构建、运行、测试任务

先决条件

🌠 要使这些功能正常工作,您必须安装 Rust 工具链以及以下包 cargo-cachecargo-watchflamegraphnu,并按照以下说明进行操作

  1. 使用 rustup 安装 Rust 工具链,请按照以下说明进行操作 此处
  2. 使用 cargo install cargo-cache 安装 cargo-cache
  3. 使用 cargo install cargo-watch 安装 cargo-watch
  4. 使用以下命令安装 flamegraphcargo install flamegraph
  5. 使用以下命令安装 nucargo install nu

要运行的命令

要运行的脚本为 run.nu。它适用于 Linux、macOS 和 Windows。请确保已安装所有 先决条件

  • 构建: nu run.nu build
  • 清理: nu run.nu clean
  • 运行示例: nu run.nu run
  • 使用发布标志运行示例: nu run.nu run-release
  • 使用火焰图分析运行示例: nu run.nu run-flamegraph
  • 运行测试: nu run.nu test
  • 运行 clippy: nu run.nu clippy
  • 构建文档: nu run.nu docs
  • 提供文档服务: nu run.nu serve-docs。这仅在您通过 VSCode (在您构建和提供文档的远程机器上) SSH 连接到远程机器,并希望在本地机器上的浏览器中查看文档时有用。
  • 升级依赖项: nu run.nu upgrade-deps
  • 运行 rustfmt: nu run.nu rustfmt

以下命令将监视源文件夹中的更改并重新运行

  • 监视运行: nu run.nu watch-run
  • 监视所有测试: nu run.nu watch-all-tests
  • 监视单个测试: nu run.nu watch-one-test <test_name>
  • 监视 clippy: nu run.nu watch-clippy
  • 监视单个测试的宏展开: nu run.nu watch-macro-expansion-one-test <test_name>

参考

为什么为此创建新的包?

  • crates.io 上有一些类似功能的crate,但它们的许可证不可接受。
  • 其他crate只是忽略了ANSI 256色,并且只支持truecolor,即使它们声称支持。
  • 还有其他crate没有正确报告macOS Terminal.app不支持truecolor,仅支持ANSI 256色。

以下是一些链接

  1. https://github.com/rust-cli/concolor/issues/47
  2. https://docs.rs/anstream/latest/anstream/
  3. https://docs.rs/colorchoice/latest/colorchoice/
  4. https://docs.rs/colorchoice-clap/latest/colorchoice_clap/
  5. https://docs.rs/anstyle-query/latest/anstyle_query/fn.term_supports_ansi_color.html
  6. https://crates.io/crates/anstyle-query
  7. https://docs.rs/supports-color/2.0.0/supports_color/
  8. https://crates.io/crates/r3bl_ansi_color (在 ansi_color 文件夹中的源代码是这个crate)
  9. https://crates.io/crates/colored

依赖关系