CrossTerm 使用详解

2022-09-19 rust language

  • terminal 与终端相关的操作,例如获取、修改窗口大小。

输出

该库提供了 QueueableCommand ExecutableCommand 两个 trait 实现,分别提供了 queueexeute 函数,而且为常见的 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 等也是相同的。