#打印 #着色 #终端 #结构化 #终端着色 #termcolor #颜色

tcprint

使用 termcolor 结构化、着色打印到终端

5 个版本

0.1.5 2020 年 9 月 1 日
0.0.0-dev.32020 年 9 月 1 日

#526命令行界面

MIT 许可证

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 重新导出 ColorColorSpec,以便于这样做。

#[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