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 在 命令行界面
3,045 每月下载量
被 252 个包(18 个直接) 使用
41KB
320 行(不含注释)
着色终端输出
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)");
});
});
它易于使用,并且与 println!
/print!
集成良好。主要设计目标是保持简单。这有一个性能缺点:它通常会在每次打印操作后重置终端样式。但在终端打印时,性能通常不是非常重要,因此简单性对于此库的设计更为重要。
更多示例 在此 (examples/main.rs
) 或在 文档 中。
何时(不)使用此包
可观察宇宙中的终端颜色包比星星还要多,因此询问“哪个最好”是一个合理的问题。不幸的是,我认为没有明确的答案。
不要 使用此包,如果您
- 希望完全控制发生的情况(考虑使用
rust-lang/term
),或者 - 您想在多个线程中打印(考虑使用
termcolor
或bunt
),或者 - 您想在非 stdout 上着色/格式化打印的文本(尽管
term-painter
可能会在将来添加对 stderr 的支持) - 您需要一个积极开发的crate(请参阅"此crate的状态")
- 您想使用一个名字花哨的crate(例如
term-painter
这样的名字太无趣了 😒)
如果您
- 不需要支持非ANSI终端(仅支持ANSI格式化使lib的作者在API设计中拥有更大的灵活性,从而可能使其更容易、更强大。请参阅"跨平台"部分。考虑使用
ansi-term
、colored
、yansi
等代替。),或者 - 您期望一个经得起时间考验的库
如果
- 您需要支持非ANSI终端,并且
- 您正在开发一个非关键项目
跨平台
此crate在内部使用rust-lang/term
。 term
支持所有(或者说:许多)平台,因此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版本,(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则根据Apache-2.0许可协议定义的,您有意提交以包含在作品中的任何贡献,都应双许可,如上所述,不附加任何额外条款或条件。
依赖关系
~155–610KB