#input #user-input #terminal #key #stream #synchronous #output

in-keys

用于在方便的 Terminal 构造中利用流的Crate

3个不稳定版本

0.2.0 2023年9月21日
0.1.1 2023年9月18日
0.1.0 2023年9月18日

#832异步

MIT/Apache

35KB
485

终端输入处理(In-Keys)

此Crate提供了处理终端输入的函数,重点在于提供同步和异步选项。它使用底层系统调用来进行高效的输入轮询和处理。同时也有最小限度的输出流支持。

同步输入

同步输入函数允许进行阻塞操作,程序会等待用户输入。这些函数包括读取单个键、处理特殊键的转义序列以及读取以Enter键终止的字符字符串。

异步输入

异步输入函数使用轮询机制来检查是否有可用输入,而不会阻塞程序的执行。这些函数在程序需要在监控用户输入的同时保持对其他任务或事件响应的场景中非常有用。

示例用法

use in_keys::Terminal;
use std::time::Duration;
use tokio::time;

let terminal = Terminal::new();

// Synchronous input
let key = terminal.read_key(); // Blocking, waits for user input

// Asynchronous input
let mut lock = terminal.lock_stdin().expect("Failed to connect with terminal");
let future_key = lock.read_key_future(); // Returns a future immediately
let result = time::timeout(Duration::from_secs(5), future_key).await;

match result {
    Ok(Ok(key)) => println!("Received key: {:?}", key),
    Ok(Err(error)) => eprintln!("Error reading key: {}", error),
    Err(_) => eprintln!("Timed out waiting for input"),
}

注意

  • 此模块使用底层系统调用,可能不适用于所有平台。目前仅真正支持Linux。
  • 在使用异步输入时,应谨慎行事,因为它可能会引入额外的复杂性和开销。

依赖项

~265–760KB
~18K SLoC