除了原始模式之外,还有另一种方法可以处理Rust中的箭头键输入吗?

时间:2018-04-29 22:14:52

标签: shell rust

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

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

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

  

如果没有原始模式,则无法编写正确的交互式TTY应用程序。原始模式使您可以完全控制TTY:

     
      
  1. 它禁用行缓冲:您可能会注意到,您的命令行应用程序往往表现得像命令行。当用户输入\ n时,程序将首先获得输入。原始模式使程序在每次击键后获得输入。
  2.   
  3. 它禁用显示输入:如果没有原始模式,您键入的内容将显示在屏幕上,这使得它不足以用于大多数交互式TTY应用程序,其中键可以表示控件而不是文本输入。
  4.   
  5. 它禁用输出的规范化:例如,\ n表示“向下移动一个单元格”而不是“断行”,对于换行符\ n \ r \ n是必需的。
  6.   
  7. 禁用滚动。
  8.   

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

1 个答案:

答案 0 :(得分:0)

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

我没有使用过任何一个,所以这个列表不是推荐。看看其中的一些,并选择一个适合您的需求。