如何从带有占位符的用户那里获取输入?

How to get input from user with placeholder?

提问人:ThatOneEnby1337 提问时间:8/4/2023 最后编辑:kmdrekoThatOneEnby1337 更新时间:10/4/2023 访问量:98

问:

我目前正在用 Rust 编写一个简单的记事本应用程序。在主循环期间,系统会要求用户插入、删除或更改行。当用户更改一行时,我想预先填充该行的内容,以便用户可以更轻松地编辑行。

像这样(下划线表示终端光标。用户在选择该行后未进行任何输入):

Content:
1. Test
2. 123
Action(Change, Insert, Delete) --> C
Which line --> 2
--> 123_

我发现了一些可以提供帮助的板条箱:Crossterm 和 Termion。Ncurses 也可以提供帮助,但我宁愿不使用它。

rust 用户输入

评论

1赞 tadman 8/4/2023
所以你在写前任?为什么不使用“诅咒”库呢?这将使它更容易使用,类似于您期望在 1980 年代而不是 1960 年代的纸质电传打字机时代找到的东西。
1赞 tadman 8/4/2023
我认为你很快就会发现一个问题,那就是打印出来的东西并不能使它成为“可输入的”,如果你不受限制地接受退格键,屏幕很快就会被损坏。即使是一个超级愚蠢的基本编辑器也需要限制,比如只在行的开头向后间隔,以及处理比终端屏幕更宽的行。您必须跟踪击中了哪些键,从缓冲区中删除字符,并在键入时进行追加。不会很有趣!
1赞 Jmb 8/4/2023
或者,如果您不想要一个完整的 TUI 库,rustyline 可以readline_with_initial
0赞 ThatOneEnby1337 8/4/2023
@Jmb这正是我所需要的。你介意把这个作为答案发布,这样我就可以把这个问题标记为已解决吗?

答:

1赞 Jmb 8/5/2023 #1

如果您不想使用像 ratatui 这样的完整 TUI 板条箱或像 termion 这样类似较低级别的“诅咒”终端处理板条箱,您仍然可以使用 rustyline 进行基本输入和行编辑。专门用于编辑预填充行,您可以使用以下readline_with_initial

let mut rl = rustyline::DefaultEditor::new()?;
let line = rl.readline_with_initial ("-->", ("123", ""))?;