如何从具有超时的终端读取UTF-8字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从具有超时的终端读取UTF-8字符?相关的知识,希望对你有一定的参考价值。

我正在尝试在Rust中实现命令行编辑库。

为了正确处理ESC键,我需要等待可能永远不会到达的转义序列的其余部分。

当前,我正在使用:

let stdin = io::stdin();
let mut chars = stdin.lock().chars();
let mut ch = try!(chars.next().unwrap());

但似乎无法指定超时。我应该尝试将Rust IO与poll function混合吗?

答案

async-std板条箱对此具有开箱即用的支持:

use async_std::io;
use std::time::Duration;

#[async_std::main]
async fn main() -> std::io::Result<()> 
    let input = io::timeout(Duration::from_secs(5), async 
        let stdin = io::stdin();
        let mut line = String::new();
        stdin.read_line(&mut line).await?;
        Ok(line)
    )
    .await;

    println!(":?", input);

    Ok(())

以上是关于如何从具有超时的终端读取UTF-8字符?的主要内容,如果未能解决你的问题,请参考以下文章

ioos(从终端文件字符串读取的小例子)

我如何保证终端具有 NCURSES 的 Unicode/宽字符支持?

ubuntu中在终端下如何查找具有某一特定字符串的文件?

如何使用 APDU 命令从 PoS 终端读取 MCC 代码

如何设置mac终端ssh超时时间

如何使用AT命令和ELM327设置超时