#ansi-colors #terminal-colors #color #ansi #terminal #cli #tui

ansirs

一个简单(可能存在缺陷)的小型库,用于处理 ANSI 颜色代码

1 个不稳定版本

0.1.7 2023年1月18日

#699命令行界面

MPL-2.0 许可证

190KB
4K SLoC

Ansirs(像答案一样?)

GitHub GitHub Workflow Status GitHub Workflow Status Rust Report Card Coverage Status GitHub last commit

一个简单且可能存在缺陷的小型库,使得在 Rust 中使用 ANSI 颜色代码变得非常简单。

我经常制作很多糟糕的小型终端应用程序,并且厌倦了在谷歌上搜索 ANSI 颜色代码,或者安装一些庞大或难以管理的软件包来处理它们,因此我决定制作自己的愚蠢且/或难以管理的软件包!

使用方法尽可能简单,因为我相当笨,并希望对未来的自己来说尽可能容易。

use ansirs::{Ansi, Colors, IntoAnsi, style_text};

let header_style = Ansi::new()
    .fg((25, 50, 250))      // Set foreground color to (25, 50, 250)
    .bg((255, 255, 255))    // Set background to white.
    .bold()                 // Set (toggle) bolded text.
    .underline();            // Set (toggle) underlined text.
let body_style = Ansi::new()
    .fg((50, 200, 50))
    .bg((255, 255, 255));
let mistake_style = Ansi::new()
    .fg((200, 25, 25))
    .bg(Colors::White)      // Most named html colors can be used from Colors
    .strike()               // Set (toggle) strike-through.
    .italic();              // Set (toggle) italic text.

// Output can be saved (it is just a String)
let header = style_text("Ansirs Crate", header_style);
println!("{}", header);
// Or you can use style_text directly in println.
println!("{}", style_text("Simple and probably flawed library for dealing with ANSI color codes in rust!", body_style));
// You can also use the Ansi directly, but must remember to reset the style afterwards.
println!("{}Definitely an awesome crate.{}", mistake_style, Ansi::reset());

println!("{}", body_style.paint_text("Theres also a number of convenience functions available."));
ansirs::styled_print("Like these!", mistake_style);

style_text 还可以接受一个 lambda 表达式来动态生成样式。Lambda 表达式应该匹配以下函数签名 Fn() -> Ansi

// Same output as above, but without the locals variables. Keep in mind this makes reusing styles more difficult.
use ansirs::{Ansi, IntoAnsi, style_text};

println!("{}", style_text("Ansirs Crate", || Ansi::new()
    .fg((25, 50, 250))
    .bg((255, 255, 255))
    .bold()
    .underline()));
println!("{}", style_text("Simple and probably flawed library for dealing with ANSI color codes in rust!", || Ansi::new()
    .fg((50, 200, 50))
    .bg((255, 255, 255))));
println!("{}", style_text("Definitely an awesome crate.", Ansi::new()
    .fg((200, 25, 25))
    .bg((255, 255, 255))
    .strike()
    .italic()));

主要类型

  • ansirs::Ansi - 主要结构,用于存储样式和格式化信息
  • ansirs::Color - 简单的颜色类,表示为 (u8, u8, u8)
  • ansirs::Colors - 命名(HTML)颜色,可以转换为 Color 以及 Ansi
  • ansirs::PrettyString - 即将推出 一种可交换类型,可以存储文本以及格式

以下信息适用于库开发,具体请参阅函数文档。

待办事项

  • 使示例 all_colors_256 中的使用更简便
  • 添加 覆盖率、lint 以及可能的项目 gh actions
    • 自从Rust 1.60(稳定版)稳定了基于LLVM的覆盖率工具之后,现在覆盖率检查变得非常简单。目前我正在使用 cargo-llvm-cov 包,可以通过运行以下命令生成lcov格式的覆盖率报告:cargo llvm-cov --all-features --workspace --lcov --output-path cov/lcov.info,并可以使用Coverage Gutters vscode插件(ryanluker.vscode-coverage-gutters)来显示,或者使用以下命令生成HTML报告:cargo llvm-cov --html
  • 找出这个包中存在的所有错误。
  • 扩展测试
  • 扩展功能?
  • Styled 特性用于指定某些类型的默认样式。我考虑的是类似于 std::fmt 函数家族的方式,即编写一个用户定义的“构建器”类型函数,该函数可以访问实例和一些默认样式。
  • 此外,也许还可以将其扩展到“主题”。

依赖项

~1.5–7MB
~35K SLoC