#terminal-colors #color #ansi-colors #ansi-term #terminal #string-formatting #cli

vari

一个用于将颜色和外观效果格式化到终端的字符串库

10 个版本

0.2.1 2022年1月15日
0.2.0 2022年1月15日
0.1.8 2022年1月15日

#23 in #string-formatting

每月 27 次下载

AGPL-3.0

75KB
280 代码行

Logo

Varity

crates.io crates.io crates.io License

Varity (Väri) 是一个用于将颜色和外观效果格式化到终端的 Rust 库。类似于 Python 的 Rich 库。

Väri 在芬兰语中意为“颜色”。

安装

Varity 默认包含颜色锚点功能,其他可选功能包括:”log”,”fun”,

[dependencies]
vari =  "0.2.1"

功能

颜色锚点

这是默认功能。

颜色锚点类似于 bbcode 的标记,用于颜色和样式(例如. "[$red]", "[bg$yellow]", "[$bold]")

锚点

颜色

  • [$black]
  • [$red]
  • [$green]
  • [$yellow]
  • [$blue]
  • [$magenta]
  • [$cyan]
  • [$white]
  • [$reset] 或 [$r] 或 [$/]

亮色

  • [$bright_black] 或 [$brightblack]
  • [$bright_red] 或 [$brightred]
  • [$bright_green] 或 [$brightgreen]
  • [$bright_yellow] 或 [$brightyellow]
  • [$bright_blue] 或 [$brightblue]
  • [$bright_magenta] 或 [$brightmagenta]
  • [$bright_cyan] 或 [$brightcyan]
  • [$bright_white] 或 [$brightwhite]

样式

  • [$regular]
  • [$bold]
  • [$dim] 或 [$low] 或 [$low_intensity] 或 [$lowintensity]
  • [$italic]
  • [$underline]
  • [$blink] 或 [$blinking]
  • [$reverse] 或 [$reversed]
  • [$invisible] 或 [$hidden]
  • [$strikethrough] 或 [$strike_through]

注意:[bg$any] 是一个有效的锚点,它将被转换为 [$reversed][$any](其中 `any` 是上述颜色/样式的名称)

// [$/] is shorthand for [$reset]
let message = vari::format("[$blue]Hello, [$green]World![$/]");
println!("{}", message);

// Custom RGB!
println!("{}", vari::format("[$[114, 119, 39]]#727727![$[66, 4, 32]] Do you see it?[$/]"));

// Style anchor and also easy macros :O
vprintln!("{}Bold and Italic :O{}", "[$bold][$italic]", "[$/]");

// Background color
vprintln!("{}Backgroundssss{}[$/]", "[bg$magenta]", "[bg$[188, 188, 188]]World![$/]")

// Hexadecimal
vprintln!("[$#ffffff]Hello, [$#000000]World![$/]");

彩色化

[dependencies]
vari = { version =  "0.2.1", features = ["colorize"] }

通过调用 colorize() 方法直接彩色化字符串,类似于 colored crate。

例如:“red”.colorize("red") 等同于 "[$red]red[$/]"

注意:尚未实现链式调用,因为 .colorize() 添加了 [$/],所以不能链式调用样式

参数应该是颜色的名称(与锚点颜色相同的名称)。

use vari::colorize::Colorize;

fn main() {
    println!("{}", "Hello, World".colorize("cyan"));
    println!("{}", "This is red".colorize("brightred"));
    println!("{}", "Bold.".colorize("bold"));
}

日志

[dependencies]
vari = { version =  "0.2.1", features = ["log"] }

一些 println-ish 函数用于记录日志

let log_message = vformat!("[$green]This message is send by main.rs![$/]");
let log_file = vformat!("[$dim]src/main.rs[$/]");
vari::util::log(&log_message, &log_file);

logs

对于 .len() 不使用 ANSI

这是默认功能。

这可能在填充计算中使用,因为在彩色字符串(例如. "\x1b[31mTest\x1b[0m")中,计算的长度也包含了 "[31m" 和 "[0m",这会使填充不正确。因此,这个 trait 实现了一个 ".no_ansi()",它会移除所有的 ANSI 转义序列,然后你可以在之后执行 ".len()"。

// vari::util::log()

// Calculate padding amount between the message.
// eg. left________right
let padding_amount = w - right.no_ansi().len() - left.no_ansi().len();
let padding = " ".repeat(padding_amount);
        
let mut result = String::new();

result.push_str(left);
result.push_str(&padding);
result.push_str(right);

return result      

no_ansi()

娱乐

[dependencies]
vari = { version =  "0.2.1", features = ["fun"] }
fn main() {
    // Rainbow colors!
    println!("{}", vari::fun::rainbow("Rainbow!!!"));
}

许可证

此软件包受 AGPL-3.0 许可证的保护。

依赖项

~2.1–3.5MB
~55K SLoC