gpt4 book ai didi

rust - 如何防止 “type-ahead”

转载 作者:行者123 更新时间:2023-12-03 11:44:13 25 4
gpt4 key购买 nike

我想使用 crate 对话器让用户检查并更正一些建议的数据。
Cargo.toml依赖项

[dependencies]
dialoguer = "0.7"
src/main.rs
use dialoguer::Input;

fn main() {
// searching the web
std::thread::sleep(std::time::Duration::from_secs(5));
let suggestion = "Catpictures".to_string();

let data : String = Input::new()
.with_prompt("suggested")
.with_initial_text(suggestion)
.interact_text()
.expect("failed to correct suggestion");
}
我的问题是,当程序搜索建议时,用户可能会开始键入并可能按Enter。
然后程序显示建议并立即接受答案。
我想防止这种行为。
当前行为:
  • 启动程序
  • 按下Enter键(无论出于何种原因)
  • 程序显示建议并立即接受建议

  • 期望的行为:
  • 启动程序
  • 按下Enter键(无论出于何种原因)
  • 程序显示建议
  • 用户可以编辑建议并输入
  • 接受

    有清除输入的方法吗?

    最佳答案

    标准库和 dialoguer 都不具有清除stdin的功能。
    一种解决方法是使用 AsyncReader 中的 crossterm_input crate,您可以在其中轮询标准输入中的输入(events)。这样,您就可以在使用dialoguer之前清除所有待处理的输入。

    // crossterm_input = "0.5"
    fn clear_stdin() {
    let input = crossterm_input::input();
    let mut async_stdin = input.read_async();
    while let Some(_) = async_stdin.next() {}
    }
    您更新后的示例将如下所示:
    use dialoguer::Input;

    fn main() {
    // searching the web
    thread::sleep(time::Duration::from_millis(200));
    let suggestion = "Catpictures".to_string();

    clear_stdin();

    let data = Input::new()
    .with_prompt("suggested")
    .with_initial_text(suggestion)
    .interact_text()
    .expect("failed to correct suggestion");
    }

    关于rust - 如何防止 “type-ahead”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65353772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com