terminal
与终端相关的操作,例如获取、修改窗口大小。
输出
该库提供了 QueueableCommand
ExecutableCommand
两个 trait
实现,分别提供了 queue
和 exeute
函数,而且为常见的 stdout
实现了该 trait
,这样就可以直接使用。
其中 queue
提供了缓冲区可以懒执行,而 execute
则会直接执行。
stdout.execute(cursor::MoveTo(5,5));
execute!(stdout, cursor::MoveTo(5,5));
如下是一个输出所支持颜色的实现。
let mut stdout = std::io::stdout();
for i in 0..=255 {
stdout.queue(Print("█".with(style::Color::AnsiValue(i))))?;
}
stdout.flush()?;
其它
Raw Mode
默认终端会根据输入预设一些规则,这也是最常用的 ANSI 模式,例如 \n
表示换行,会切换到下一行并到行首,Ctrl-C
表示退出,通常是正在执行的某个命令。
当在某些应用中,可能需要自定义模式,那么就是所谓的 Raw Mode 了。
Alternate Screen
某些终端会提供该机制,相当于另外一个屏幕缓冲区,可以进行正常的屏幕操作,退出的时候恢复原有的屏幕,对于全屏应用,像文本编辑器、终端游戏等比较有用,不会干扰用户原有的操作。
queue!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;
queue!(stdout, terminal::LeaveAlternateScreen, cursor::Show)?;
注意事项
MoveToNextLine()
如果到了最后一行,那么就不会向下,其它的MoveDown
MoveUp
等也是相同的。