32 个稳定版本 (3 个主要版本)

使用旧的 Rust 2015

4.0.2 2024 年 6 月 12 日
4.0.0 2024 年 5 月 6 日
3.0.0 2024 年 1 月 5 日
2.0.3 2023 年 11 月 4 日
1.0.4 2016 年 7 月 29 日

#54命令行界面

Download history 19821/week @ 2024-05-04 19922/week @ 2024-05-11 21782/week @ 2024-05-18 19287/week @ 2024-05-25 21757/week @ 2024-06-01 20007/week @ 2024-06-08 20482/week @ 2024-06-15 18210/week @ 2024-06-22 16392/week @ 2024-06-29 15088/week @ 2024-07-06 18846/week @ 2024-07-13 18893/week @ 2024-07-20 19923/week @ 2024-07-27 17797/week @ 2024-08-03 21649/week @ 2024-08-10 19106/week @ 2024-08-17

81,713 每月下载量
用于 709 个 crates (544 个直接使用)

MIT 许可证

73KB
1.5K SLoC

Termion logo

Build Status Latest Version 文档 示例 变更日志 教程

Termion 是一个纯 Rust、无绑定的库,用于低级处理、操作和读取有关终端的信息。它为 Termbox 提供了一个功能齐全的替代方案。

Termion 旨在简单且富有表现力。它是无绑定的,这意味着它不是其他库(例如 ncurses 或 termbox)的前端,而是一个直接与 TTY 通信的独立库。

Termion 非常方便,因为它完全覆盖了基本的 TTY 功能,提供了一致的 API。Termion 是相当底层的,只包含与幕后实际发生的情况相匹配的抽象。对于更高级的功能,请参考 inquirer-rs,它使用 Termion 作为后端。

Termion 为用户提供转义符和 API 调用。这使得使用转义符变得更加简洁。

支持 Redox、Mac OS X、BSD 和 Linux(或更一般地说,ANSI 终端)。

关于稳定性的说明

此 crate 是稳定的。

Cargo.toml

[dependencies]
termion = "*"

3.0.0 到 4.0.0 指南

只有在你没有使用通配符匹配 MouseEvent 枚举的所有变体时,才需要更改。在这种情况下,你需要处理两个新变体,即 MouseLeftMouseRight,或者添加通配符。

2.0.0 到 3.0.0 指南

只有在您使用过通用终端 W: Write 上的 IntoRawMode 时才需要更改。现在,终端也必须实现 AsFd 特性。因此,将泛型约束替换为 W: Write + AsFd 应该足够了。

1.0.0 到 2.0.0 指南

1.0.0 2.0.0
AlternativeScreen::(x) x.转换到 into_alternative_screen()

0.1.0 到 1.0.0 指南

以下示例表格展示了如何将 Termion 转换为新主要版本的方法。

0.1.0 1.0.0
使用 termion::IntoRawMode 使用 termion::raw::IntoRawMode
使用 termion::TermRead 使用 termion::输入::TermRead
stdout.颜色(颜色::红色); 写入!(stdout,"{}", 颜色::前景色(颜色::红色));
stdout.颜色背景(颜色::红色); 写入!(stdout,"{}", 颜色::背景色(颜色::红色));
stdout.移动到(x,y); 写入!(stdout,"{}", 光标::移动到(x,y));
颜色::rgb(r,g,b); color::Rgb(r, g, b) (真彩色)
x.带鼠标() MouseTerminal::(x)

功能

  • 原始模式。
  • 真彩色。
  • 256-色模式。
  • 光标移动。
  • 文本格式化。
  • 控制台大小。
  • 仅 TTY 流。
  • 控制序列。
  • Termios 控制。
  • 密码输入。
  • Redox 支持。
  • 安全的 isatty 包装器。
  • 无恐慌的错误处理。
  • 特殊按键事件(修饰符、特殊键等)。
  • 无分配。
  • 异步按键事件。
  • 鼠标输入。
  • 仔细测试。
  • 每个项目的详细文档。

等等。

示例

样式和颜色。

extern crate termion;

use termion::{color, style};

use std::io;

fn main() {
    println!("{}Red", color::Fg(color::Red));
    println!("{}Blue", color::Fg(color::Blue));
    println!("{}Blue'n'Bold{}", style::Bold, style::Reset);
    println!("{}Just plain italic", style::Italic);
}

移动光标

extern crate termion;

fn main() {
    print!("{}{}Stuff", termion::clear::All, termion::cursor::Goto(1, 1));
}

鼠标

extern crate termion;

use termion::event::{Key, Event, MouseEvent};
use termion::input::{TermRead, MouseTerminal};
use termion::raw::IntoRawMode;
use std::io::{Write, stdout, stdin};

fn main() {
    let stdin = stdin();
    let mut stdout = MouseTerminal::from(stdout().into_raw_mode().unwrap());

    write!(stdout, "{}{}q to exit. Click, click, click!", termion::clear::All, termion::cursor::Goto(1, 1)).unwrap();
    stdout.flush().unwrap();

    for c in stdin.events() {
        let evt = c.unwrap();
        match evt {
            Event::Key(Key::Char('q')) => break,
            Event::Mouse(me) => {
                match me {
                    MouseEvent::Press(_, x, y) => {
                        write!(stdout, "{}x", termion::cursor::Goto(x, y)).unwrap();
                    },
                    _ => (),
                }
            }
            _ => {}
        }
        stdout.flush().unwrap();
    }
}

读取密码

extern crate termion;

use termion::input::TermRead;
use std::io::{Write, stdout, stdin};

fn main() {
    let stdout = stdout();
    let mut stdout = stdout.lock();
    let stdin = stdin();
    let mut stdin = stdin.lock();

    stdout.write_all(b"password: ").unwrap();
    stdout.flush().unwrap();

    let pass = stdin.read_passwd(&mut stdout);

    if let Ok(Some(pass)) = pass {
        stdout.write_all(pass.as_bytes()).unwrap();
        stdout.write_all(b"\n").unwrap();
    } else {
        stdout.write_all(b"Error\n").unwrap();
    }
}

用法

请参阅 examples/ 和文档,这些文档可以使用 cargo doc 渲染。

有关更完整的示例,请参阅我在 Redox 中使用 termion 编写的 扫雷实现

许可证

MIT/X11。

依赖关系

~22–275KB