gpt4 book ai didi

shell - 除了原始模式之外,还有其他方法可以处理 Rust 中的箭头键输入吗?

转载 作者:行者123 更新时间:2023-11-29 08:20:37 39 4
gpt4 key购买 nike

我正在 Linux 上用 Rust 编写一个小 shell 作为练习,我想实现命令历史记录以及光标移动(即向后移动光标以编辑命令中的拼写错误)。

我没有在 Rust 标准库中找到处理箭头键事件的方法,但我找到了 Termion处理关键事件的 crate 。

但是,使用 Termion 处理关键事件意味着进入标准输出的“原始模式”,这会覆盖“遗留”功能,如 this article about the crate 中所述。 :

Without raw mode, you cannot write a proper interactive TTY application. Raw mode gives you complete control over the TTY:

  1. It disables the line buffering: As you might notice, your command-line application tends to behave like the command-line. The programs will first get the input when the user types \n. Raw mode makes the program get the input after every key stroke.
  2. It disables displaying the input: Without raw mode, the things you type appear on the screen, making it insufficient for most interactive TTY applications, where keys can represent controls and not textual input.
  3. It disables canonicalization of the output: For example, \n represents “go one cell down” not “break the line”, for line breaks \n\r is needed.
  4. It disables scrolling.

我觉得这个解决方案有点矫枉过正,因为我想保留大部分“遗留”I/O 功能。是否有另一种方法来处理箭头键输入,或者我是否需要使用原始模式?

最佳答案

有几个 crate 为交互式程序提供行编辑功能。以下是我通过在 crates.io 中搜索“readline”(C 库的名称)找到的一些内容:

我没有使用过它们中的任何一个,因此不推荐此列表。看一看其中的几个,然后选择一个适合您需要的。

关于shell - 除了原始模式之外,还有其他方法可以处理 Rust 中的箭头键输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091818/

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