12

在 Windows 中运行命令提示符时,您可以键入clear命令以清除屏幕。swipl当您在 Windows 中运行 swipl prolog(通过在命令提示符中键入)时,您如何做同样的事情?

4

1 回答 1

23

在 unix 终端上,有library(tty)资源和 that has tty_clear/0,但 windows 终端不支持终端库。但是,它们确实支持ANSI Escape Codes

ESC转义码是以(转义)字符.开头的字符序列ASCII 0x1B = 27。大多数以控制序列引入器开头,它是后跟左括号的转义符: ESC [,称为CSI.

因此,您可以发出清除屏幕的代码序列,即 ED(擦除数据)命令,其形式为:

CSI 2 J   -- which expands to: ESC [ 2 J

从 SWI-Prolog 可以使用format/2原语发出。

format('~c~s', [0x1b, "[2J"]). % issue CSI 2 J

MSDOS ANSI 处理上的 ED 2 命令,完全终端清除,将光标重置到左上角,但并非所有终端都如此,因此最好与 CUP(光标位置)命令结合使用,作为重置到家简直就是:CSI H

format('~c~s~c~s', [0x1b, "[H", 0x1b, "[2J"]). % issue CSI H CSI 2 J

更新:简化

感谢@CapelliC提供了另一种更清晰的形式,使用\e转义码进行转义!

普通清屏:

cls :- write('\e[2J').

或使用家庭重置:

cls :- write('\e[H\e[2J').
于 2013-06-04T16:46:20.073 回答