57 个版本 (稳定版)
5.6.1 | 2024 年 3 月 31 日 |
---|---|
5.5.3 | 2023 年 12 月 21 日 |
5.5.0 | 2023 年 11 月 26 日 |
5.4.0 | 2023 年 7 月 27 日 |
1.0.3 | 2020 年 12 月 5 日 |
#19 in 异步
12,598 每月下载量
在 15 crates 中使用
690KB
5.5K SLoC
minus
minus
: 用于异步终端 分页 的库,用 Rust 编写。
动机
传统的分页程序如 more
或 less
并不是为了集成到其他应用程序而设计的。它们原本是为了独立执行而存在的二进制文件,直接由用户执行。然而,大多数应用程序并不遵循这一点,而是通过调用外部程序并通过标准输入传递数据来利用这些分页程序的功能。这种方法在 Unix 和其他类 Unix 操作系统(如 Linux 和 MacOS)上工作,因为这些系统已经安装了其中之一。但在 Windows 上则并不容易;它需要将分页程序的二进制文件与应用程序一起分发。由于这些程序最初是为 Unix 和类 Unix 操作系统设计的,分发这些二进制文件意味着需要分发一个完整的环境,如 MinGW 或 Cygwin,以便它们可以在 Windows 上正常运行。
最近,一些库出现以解决这个问题。它们与应用程序一起编译,并提供一个单独的二进制文件以供分发。它们的问题在于,它们要求你在分页程序运行之前将整个数据提供给分页程序,这意味着在应用程序加载并传递数据给分页程序之前,终端上不会有任何输出。
如果数据来自非常大的文件或从互联网下载,这可能会导致在终端上输出之前出现长时间的延迟。
特性
- 动态发送数据以及配置分页程序
这意味着您的数据可以在您的应用程序加载后立即在分页程序的屏幕上显示。不仅如此,您还可以在分页程序运行时配置 minus。 - 支持动态和静态输出显示的独立模式
这种模式的分离使我们能够在静态模式下执行一些酷炫的操作。例如,在静态模式下,如果终端的行数足够显示所有数据,那么“-”甚至不会启动分页器,而是将所有数据直接写入屏幕并退出。(当然,如果你不喜欢这种行为,可以避免)。同样,在静态模式下,如果使用|
将输出重定向或使用>
/>>
将输出写入文件,minus 会直接传递数据而不会启动分页器。 - 高度可配置
您可以使用简单的干净 API 来配置终端键/鼠标映射、行号、底部提示行等。 - 良好的 ANSI 转义序列支持
- 支持键盘和鼠标
键绑定灵感来源于 Vim 和其他现代文本编辑器 - 无杂乱行号
- 水平滚动:不仅可以向上或向下滚动,还可以向左或向右滚动。
注意:当水平滚动时,ANSI 转义代码会损坏,这意味着在滚动轴上,您可能会看到颜色损坏、强调等。这不是 minus 特有的问题,而是终端的行为方式,这是由于它们的固有设计限制。 - 跟随输出模式
此功能确保您始终看到最后一条数据被推送到分页器缓冲区的最后一行。 - 基于正则表达式的完整搜索。
这还完全处理转义序列。还支持增量搜索文本。 - 尽量减少依赖。
- 设计用于与
tokio
、async-std
或您喜欢的本地threads
一起使用。
用法
将 minus 添加到您的 Cargo.toml
文件中,并根据需要启用功能。
-
如果您只想将分页器用于显示静态数据,请启用
static_output
功能 -
如果您想使用分页器显示动态数据并在运行时进行配置,请启用
dynamic_output
功能 -
如果您想在分页器内进行搜索,则需要启用
search
功能
[dependencies.minus]
version = "5.6"
features = [
# Enable features you want. For example
"dynamic_output",
"search",
]
示例
您可以通过使用 cargo
在 examples
目录中尝试提供的示例。
cargo run --example <example name> --features=<required-features>
# for example to try the `dyn_tokio` example
cargo run --example dyn_tokio --features=dynamic_output,search
请参阅 文档 以了解示例的概述。
标准键盘和鼠标绑定
请参阅 文档。
MSRV
minus 的最新版本需要 Rust >= 1.67 才能正确构建。
许可
除非明确说明,否则所有与 minus
相关的作品都根据 MIT 许可证 和 Apache 许可证 2.0 双重许可。
贡献
⚠️ 请阅读有关我们标准化 Git 提交消息的计划 https://github.com/arijit79/minus/issues/103 ⚠️
问题和拉取请求总是受欢迎。请参阅 CONTRIBUTING.md 了解如何为 minus
贡献。
感谢
没有这些好心人的❤️,minus 永远不会成为这个样子
以及以下项目的帮助:
- crossterm:一个用于处理终端的出色库。
- textwrap:支持文本包装。
- thiserror:帮助定义自定义错误类型。
- regex:搜索时的正则表达式支持。
- crossbeam-channel: MPMC通道
- parking_lot: 改进的原子存储类型
- once_cell: 提供一次性初始化类型。
- tokio: 提供异步示例的运行时。
联系我们
依赖项
~2–8MB
~55K SLoC