rust - 如何在 rust tui 应用程序中切换屏幕(termion + tui-rs)
问题描述
我有一个 tui 应用程序,其中通过列表向用户提供了一些选择。一旦他们导航到他们想要的选择并按回车键,我想将他们带到“下一个”屏幕。
它比清除现有文本并打印新文本更复杂,因为我还需要替换键绑定并基本上开始一个新tui-rs
循环。更多内容如下。
屏幕 1 的代码:
pub fn draw_screen() -> Result<(), Box<dyn Error>> {
// Terminal initialization
let stdout = io::stdout().into_raw_mode()?;
let stdout = MouseTerminal::from(stdout);
let stdout = AlternateScreen::from(stdout);
let backend = TermionBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
let events = Events::new();
loop {
terminal.draw(|f| {
// user shown a list they can navigate through using arrow keys
});
match events.next()? {
Event::Input(input) => match input {
Key::Char('q') => {
break;
}
Key::Char('\n') => {
// this is where I need to "send" them to a new screen
}
Key::Down => {
// my_list won't exist on next screen
my_list.items.next();
}
Key::Up => {
my_list.items.previous();
}
_ => {}
},
_ => {}
}
}
Ok(())
}
可以看出底部的键绑定是特定于这个屏幕的。例如,在下一个屏幕上不会有 amy_list
而是可能有 amy_another_list
或my_box
根本没有。
因此,如果我所做的只是清除文本,我仍然会被留在具有相同键绑定的同一个循环中 - 不起作用。
用新的键绑定启动新循环的正确方法是什么?
解决方案
推荐阅读
- ocaml - What is the argument for Graphics.set_font from the OCaml Graphics package?
- javascript - 出现“位置 0 处的 json 中的意外令牌 u”问题
- firebase - 创建文档时触发云功能
- python-3.x - jupyter notebook 无法导入其路径在位于不同目录的导入脚本中提到的文件
- android - 如何通过单击操作栏中的按钮来选择所有复选框
- vba - 如何更改在 VBA 中创建的下拉列表的字体大小和格式
- javascript - 寻找有关如何清理一些条件语句的建议
- java - 如何在 Java 中选择一行并更新它?
- android - 更新到 build-plugin 3.4.0 后房间出现问题
- c - 如何在 mpi 中运行 c 代码:无法连接到本地 mpd (/tmp/mpd2.console_karim);可能的原因?