#console #cli #tty #hide

终端

跨不同 TUI 库的统一 API

3 个不稳定版本

0.4.0 2019 年 12 月 23 日
0.2.1 2020 年 1 月 31 日
0.1.0 2019 年 12 月 23 日
0.0.3 2019 年 10 月 22 日
0.0.2 2015 年 4 月 6 日

390命令行界面

Download history 61/week @ 2024-03-12 80/week @ 2024-03-19 74/week @ 2024-03-26 120/week @ 2024-04-02 52/week @ 2024-04-09 70/week @ 2024-04-16 91/week @ 2024-04-23 75/week @ 2024-04-30 70/week @ 2024-05-07 75/week @ 2024-05-14 78/week @ 2024-05-21 77/week @ 2024-05-28 58/week @ 2024-06-04 53/week @ 2024-06-11 64/week @ 2024-06-18 57/week @ 2024-06-25

每月下载量 243
用于 4 个 crate

MIT 许可证

96KB
2K SLoC

Donate Latest Version docs Lines of Code MIT Join us on Discord Stable Status Beta Status

跨不同 TUI 库的统一 API。

此库提供了对各种终端库的通用 API,如 termioncrosstermncursespancursesconsole

为什么需要这个库?主要有三个原因

  1. 对特定终端库及其功能的依赖性较低。
  2. 根据选择的后端支持不同功能,并允许您随时更改。
  3. 隐藏实现细节(原始模式、写入缓冲区、批量操作)。
  4. 隐藏差异(游标基于0或1、清理资源、事件处理、执行操作。)
  5. 减少生态系统中的后端映射重复(cursivetuitermimad、...)

这个库还相当年轻。如果您遇到问题,请随时创建一个问题。我会尽快修复它。

目录

功能

  • 在执行(刷新)之前批量处理多个终端命令。
  • 完全控制底层缓冲区。
  • 锁定终端一段时间。
  • 选择的后端。

实现的后端

  • Crossterm(纯 Rust 和跨平台)
  • Termion(纯 Rust 用于 UNIX 系统)
  • Crosscurses(跨平台,但需要 ncurses C 依赖(fork pancurses))

使用以下功能标志之一选择后端。

功能 描述
crossterm-backend 将使用 crossterm 后端。
termion-backend 将使用 termion 后端。
crosscurses-backend 将使用 crosscurses 后端。

[dependencies.terminal]
version = "0.2"
features = ["crossterm-backend"] 

后端规范文档中,您可以找到每个后端及其优势的描述。

尚未实现

入门

点击显示Cargo.toml。
[dependencies]
terminal = "0.2"
features = ["your_backend_choice"] 

use terminal::{Action, Clear, error, Retrieved, Value};
use std::io::Write;

pub fn main() -> error::Result<()> {
    let mut terminal = terminal::stdout();

    // perform an single action.
    terminal.act(Action::ClearTerminal(Clear::All))?;

    // batch multiple actions.
    for i in 0..20 {
        terminal.batch(Action::MoveCursorTo(0, i))?;
        terminal.write(format!("{}", i).as_bytes());
    }

    // execute batch.
    terminal.flush_batch();

    // get an terminal value.
    if let Retrieved::TerminalSize(x, y) = terminal.get(Value::TerminalSize)? {
        println!("\nx: {}, y: {}", x, y);
    }

    Ok(())
}

其他资源

贡献

我非常欢迎任何形式的贡献。在您贡献之前,请务必阅读贡献指南

作者

  • Timon Post - 项目负责人 & 创建者

许可证

本项目 terminal 采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。

依赖关系

~0–1MB
~17K SLoC