#终端着色 #tui #终端接口 #终端 #用户界面 #优秀 #颜色

美观美观

将 2020 年代色彩科学应用于 1970 年代的终端用户界面

4 个版本 (2 个破坏性更新)

0.10.0 2024 年 7 月 12 日
0.9.0 2024 年 7 月 10 日
0.1.1 2024 年 6 月 13 日
0.1.0 2024 年 6 月 13 日

#260 in GUI

Apache-2.0

280KB
3.5K SLoC

美观 🌸 美观

Run Tests Publish to GitHub Pages Build Wheels

[ 文档 | Rust Crate | Python 包 | 仓库 ]

🎖️ 如同在 Real Python #211 中展示

Prettypretty 是一个 Rust 库,具有可选的 Python 集成,将 2020 年代的色彩科学应用于 1970 年代的终端,以构建出色的终端用户界面 (TUI)。预期的好处是双重的

  • 您可以利用高分辨率色彩和 色彩空间 的全部表现力和便利性来设计和构建 TUI,包括在笛卡尔或极坐标形式下的感知均匀的 Oklab,无论是否采用原始或 修改后的亮度
  • Prettypretty 负责将预期的外观与终端的功能、当前运行时上下文(包括亮色或暗色模式)以及用户的偏好(无论他们是否偏向 FORCE_COLORNO_COLOR)相协调。

为了实现这一点,prettypretty 为终端和高分辨率色彩提供简单的抽象,促进它们与常见色彩空间之间的无缝转换,并实现最先进的算法,用于 色彩映射色彩插值感知对比度,以及基于色调和亮度的下采样,以优化选择 ANSI 颜色。

Python 集成

可选的 Python 集成通过 pyffi 功能标志启用,依赖于 PyO3Maturin 来构建具有相同功能的扩展模块。只有在 Rust 库使用特质实现的地方,Python 模块 使用专用方法。此外,由于 Rust 库目前是 BYO(T)IO,即自己提供(终端)I/O,Python 库提供了强大的终端抽象,使得查询当前颜色主题的终端变得非常容易。

Python 文档 涵盖了当前仅适用于 Python 的功能。随着时间的推移,我预计这些功能也将移植到 Rust。

支持的最低 Rust 和 Python 版本

Prettypretty 充分利用了这两种编程语言,因此需要相对较新的版本。

  • 根据 cargo-msrv最低支持的 Rust 版本是 1.77.2
  • 根据 vermin最低支持的 Python 版本是 3.11.0

我预计随着项目的成熟,最低版本和最新版本之间的版本差距将越来越大,这是应该的。

脚本

除了 文档 外,了解 prettypretty 的一个好起点是脚本

  • prettypretty.progress 以下是在 Python 中使用该库的示例,仅用不到 100 行代码就实现了一个进度条。完成后的进度条如下所示,适用于浅色和深色主题。

    a complete, green progress bar under light mode a complete, green progress bar under dark mode

  • prettypretty.plot 在 Oklab 的色相/色调平面上绘制颜色,如果您不提供颜色,则默认为终端当前的颜色方案。以下是在 Apple 的 Terminal.app 中的基本主题的颜色图表。

    colors from the basic theme for Apple's Terminal.app in Oklch

  • prettypretty.grid 可视化感知对比度和颜色下采样策略,对于嵌入在 8 位颜色中的 6x6x6 RGB 立方体进行了全面可视化,对于通过更大的 24 位 RGB 立方体的 32x32 切片进行了选择性可视化。

    a grid visualizing the 6x6x6 embedded RGB cube

致谢

我于 2024 年在两个月的时间里写下了大部分的 prettypretty。两次。我首先用 Python 实现了核心颜色例程,然后又在 Rust 中实现了。到目前为止,只有 Rust 版本幸存下来。但 Python 仍然是 prettypretty 的顶级运行时目标。有两件事真正帮助了这个项目的启动。首先,我一直在尝试不同的终端样式方法,并知道我在寻找什么。其次,我从 Lea VerouChris LilleyColor.js 库和 CSS Color 4 规范上的工作中受益匪浅。Prettypretty 直接重用了 Color.js 之间的颜色空间转换公式,并实现了几个 CSS Color 4 算法。


版权 2024 Robert Grimm。此存储库中的代码已在 Apache 2.0 许可下发布为开源。

依赖项

~0–630KB
~12K SLoC