5 个版本
0.1.5 | 2020 年 9 月 1 日 |
---|---|
0.0.0-dev.3 | 2020 年 9 月 1 日 |
#526 在 命令行界面
23KB
193 行
tcprint
使用 termcolor 结构化、着色打印到终端。
版权和许可证
版权 2018-2020 Peter Williams。在 MIT 许可证下发布。除非明确说明,否则假定本项目所有贡献均按相同条款许可。
lib.rs
:
使用 termcolor 结构化、着色打印到终端。
termcolor crate 已精心设计,允许 CLI 工具以跨平台方式将颜色打印到终端——虽然大多数着色打印 crate 只支持 Unix 着色代码,但 termcolor 也可以在 Windows 上运行。虽然这是一个有价值的特性,但 termcolor API 相对较低级。
此 crate 提供了一个稍微高级一点的接口,旨在方便基本使用,并在需要时具有可扩展性。首先,相关状态被收集到一个单一的 ColorPrintState
结构中,该结构可以在应用程序中传递。这包括(1)颜色能力的标准输出和错误流句柄以及(2)预定义颜色的调色板。其次,提供了宏,使打印混合各种颜色的输出更容易。
基本用法
#[macro_use] extern crate tcprint;
use tcprint::{BasicColors, ColorPrintState};
let mut state = ColorPrintState::<BasicColors>::default();
let q = 17;
tcprintln!(state, [red: "oh no:"], (" q is: {}", q));
上面的代码将打印一行 oh no: q is 17
,其中短语 oh no:
将以红色显示。tcprintln!
宏的参数结构如下
tcprintln!(state_object, clause1, ...clauseN);
其中每个子句采用以下形式之一
(format, args...)
用于打印不带着色的输出[colorname: format, args...]
用于应用命名颜色打印(在简单情况下,请参阅BasicColors
了解可用选项){color_var, {block}: format, args...}
用于打印应用即时确定的颜色,可能使用局部变量来选择颜色(请参见tcprint!()
中的示例)
除了 tcprintln!()
外,还提供了名称为 tcprint!()
、etcprintln!()
和 etcprint!()
的宏,这些宏都与 Rust 标准库中提供的打印宏类似。
日志风格消息
提供了一个名为 tcreport!()
的额外宏,以简化打印分类为“info”、“warning”或“error”的日志消息。 待办事项:应该与标准日志 API 顺利配合!
tcreport!(state, warning: "could not locate puppy");
这将输出文本 warning: could not locate puppy
,其中 warning:
部分默认以加粗黄色显示。其他允许的前缀还有 info:
(以绿色显示)和 error:
(以红色显示)。
自定义调色板
要使用自定义颜色调色板,定义自己的具有类型为 termcolor::ColorSpec
的公共字段的 struct。然后在使用创建 ColorPrintState
struct 时使用该 struct 代替 BasicColors
。为此,此 crate 从 termcolor
重新导出 Color
和 ColorSpec
,以便于这样做。
#[macro_use] extern crate tcprint;
use std::default::Default;
use tcprint::{Color, ColorSpec, ColorPrintState};
#[derive(Clone, Debug, Eq, PartialEq)]
struct MyPalette {
/// In this app, pet names should always be printed using this color specification.
pub pet_name: ColorSpec,
}
impl Default for MyPalette {
fn default() -> Self {
// By default, pet names are printed in bold blue.
let mut pet_name = ColorSpec::new();
pet_name.set_fg(Some(Color::Blue)).set_bold(true);
MyPalette { pet_name }
}
}
fn main() {
let mut state = ColorPrintState::<MyPalette>::default();
let name = "Quemmy";
tcprintln!(state,
("the name of my dog is "),
[pet_name: "{}", name],
("!")
);
}
如果您想使用 tcreport!()
与自定义调色板,它必须实现 ReportingColors
特性。
待办事项:确定锁定计划!
依赖关系
~72–250KB