9 个版本

使用旧的 Rust 2015

0.4.0 2024年2月26日
0.3.0 2020年11月16日
0.2.4 2017年8月22日
0.2.3 2016年11月23日
0.1.1 2015年4月15日

#251命令行界面

Download history 585/week @ 2024-04-08 806/week @ 2024-04-15 849/week @ 2024-04-22 792/week @ 2024-04-29 686/week @ 2024-05-06 762/week @ 2024-05-13 687/week @ 2024-05-20 703/week @ 2024-05-27 652/week @ 2024-06-03 683/week @ 2024-06-10 775/week @ 2024-06-17 1017/week @ 2024-06-24 288/week @ 2024-07-01 620/week @ 2024-07-08 957/week @ 2024-07-15 1079/week @ 2024-07-22

3,045 每月下载量
252 个包(18 个直接) 使用

MIT/Apache 许可

41KB
320 行(不含注释)

着色终端输出

Build Status crates.io version GitHub license

文档

term-painter 是一个跨平台(即非 ANSI 终端)的 Rust 库,用于着色和格式化终端输出。它提供了简单的格式化方式,并使用 rust-lang/term 包进行实际格式化。请阅读 "何时(不)使用此包"

注意:我为着色终端文本创建了一个库: bunt。我非常喜欢它,所以您可能考虑使用 bunt 而不是 term-painter :-)

示例

println!("{} | {} | {} | {} | {}",
    Red.bg(Green).bold().paint("Red-Green-Bold"),
    Blue.paint("Blue"),
    Blue.bold().paint("BlueBold"),
    Blue.bg(Magenta).paint("BlueMagentaBG"),
    Plain.underline().paint("Underline")
);

Red.with(|| {
    print!("JustRed");
    Bold.with(|| {
        print!(" BoldRed {} BoldRed ", Underline.paint("Underline"));
    });
    print!("JustRed ");

    print!("{}", Blue.paint("Blue (overwrite) "));
    Green.with(|| {
        println!("Green (overwrite)");
    });
});

alt text

它易于使用,并且与 println!/print! 集成良好。主要设计目标是保持简单。这有一个性能缺点:它通常会在每次打印操作后重置终端样式。但在终端打印时,性能通常不是非常重要,因此简单性对于此库的设计更为重要。

更多示例 在此 (examples/main.rs) 或在 文档 中。

何时(不)使用此包

可观察宇宙中的终端颜色包比星星还要多,因此询问“哪个最好”是一个合理的问题。不幸的是,我认为没有明确的答案。

不要 使用此包,如果您

  • 希望完全控制发生的情况(考虑使用 rust-lang/term),或者
  • 您想在多个线程中打印(考虑使用 termcolorbunt),或者
  • 您想在非 stdout 上着色/格式化打印的文本(尽管 term-painter 可能会在将来添加对 stderr 的支持)
  • 您需要一个积极开发的crate(请参阅"此crate的状态"
  • 您想使用一个名字花哨的crate(例如term-painter这样的名字太无趣了 😒)

如果您

  • 不需要支持非ANSI终端(仅支持ANSI格式化使lib的作者在API设计中拥有更大的灵活性,从而可能使其更容易、更强大。请参阅"跨平台"部分。考虑使用ansi-termcoloredyansi等代替。),或者
  • 您期望一个经得起时间考验的库

如果

  • 您需要支持非ANSI终端,并且
  • 您正在开发一个非关键项目

跨平台

此crate在内部使用rust-lang/termterm支持所有(或者说:许多)平台,因此term-painter也是如此。

它是如何工作的?为了工作,此crate依赖于println!及其朋友评估其参数的特定方式(这是常识性的方式)。没有关于参数评估的保证,但目前在它工作。坦白说,这种评估方式不太可能改变。但是,例如,如果println!()始终首先调用format!()并打印结果String,则它将无法工作。

为了对终端世界进行简化的解释:有ANSI终端和非ANSI终端。ANSI格式化通过将特殊控制字符插入字符串来实现。因此,您可以将格式化的字符串存储在String中以供稍后打印。非ANSI终端工作方式不同,最常用的是cmd,它是Windows 7/10的一部分。对于cmd的格式化是通过在打印前后调用winapi的方法来实现的。因此,您不能轻易地存储格式化的字符串。除此之外,据我所知,主要使用cmd的开发者并不多——大多数Windows开发者仅使用IDE或另一个Windows终端(有很多)。

总之:大多数终端支持ANSI着色,非ANSI终端使世界变得更加复杂。

此crate的状态

此crate不再积极开发。API可能保持不变。我怀疑这个crate是否能达到1.0里程碑。这并不意味着这个crate不能工作!如果它符合您的需求,您仍然可以使用它。

感谢

我从rust-ansi-term那里获得了一些设计想法。然而,我决定制作自己的crate,因为我的目标与ansi-term太不同了(特别是:ansi-term在所有地方都不工作)。


许可证

根据您的选择,许可为

贡献

除非您明确说明,否则根据Apache-2.0许可协议定义的,您有意提交以包含在作品中的任何贡献,都应双许可,如上所述,不附加任何额外条款或条件。

依赖关系

~155–610KB