我试着从右到左打印几个单词,但我的最后一个单词覆盖了前面的单词并擦除了最后一行。我在输出中得到了第二个单词,我做错了什么?谢谢你。
fn render(&self, stdout: &mut Stdout) {
stdout
.execute(Clear(ClearType::All))
.unwrap()
.execute(MoveTo(30, 20))
.unwrap()
.execute(Print("First"))
.unwrap()
.execute(MoveTo(20, 20))
.unwrap()
.execute(Print("Second"))
.unwrap();
}
您的程序很可能在打印"Second"后退出。shell会覆盖光标当前位置之后的所有内容,也就是文本"second"之后的所有内容。因为这是函数做的最后一件事。如果你在退出前添加了一个睡眠调用:
...
.execute(Print("Second"))
.unwrap();
std::thread::sleep(std::time::Duration::from_secs(5));
您将看到以下输出:
<lots of blank lines>
Second| First
,其中|
为光标的位置。程序退出后,光标后的所有文本被擦除(在zsh
和bash
上测试)。
您可以在退出前移动到下一行,从而使shell保留该行:
use std::io::stdout;
use crossterm::{cursor::*, style::*, terminal::*, ExecutableCommand};
fn main() {
let mut stdout = stdout();
stdout
.execute(Clear(ClearType::All))
.unwrap()
.execute(MoveTo(30, 20))
.unwrap()
.execute(Print("First"))
.unwrap()
.execute(MoveTo(20, 20))
.unwrap()
.execute(Print("Second"))
.unwrap()
.execute(MoveTo(0, 21))
.unwrap();
}