在Windows中清除Swipl Prolog屏幕

12

当您在 Windows 中运行命令提示符时,您可以键入 clear 命令来清除屏幕。那么当您在 Windows 上运行 swipl Prolog(通过在命令提示符中键入swipl)时,如何执行相同的操作?

当您在 Windows 上运行 swipl Prolog 时,请使用以下命令清除屏幕:system(clear).
1个回答

23
在unix终端中,有一个名为library(tty)的资源,其中包含tty_clear/0函数,但是Windows终端不支持该终端库。然而,Windows终端支持ANSI转义码
转义码是以ESC(转义)字符开始的字符序列,ASCII 0x1B = 27。大多数转义码都以控制序列引导符开头,这是转义后跟着左方括号:ESC [,称为CSI
因此,您可以发出屏幕清除的代码序列,即ED(Erase Data)命令,其形式如下:
CSI 2 J   -- which expands to: ESC [ 2 J

使用SWI-Prolog,可以使用format/2原语来实现此操作。

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

ED 2命令,完全清除终端,在MSDOS ANSI处理中将光标重置为左上角,但并非所有终端都是如此,因此最好结合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').

4
不错的发现。我忘记了 ANSI 序列。你可以用 \e 表示 ESC,因此可以在 SWI-Prolog 配置文件中存储以下过程:cls :- write('\e[2J').cls :- write('\e[H\e[2J'). - CapelliC
@CapelliC:很有用,我不知道它支持\e,这是一个更干净的改进。 - Orbling
@CapelliC:\e 不是 ISO 标准,被 GNU 和 SICStus 拒绝。请使用 \33\ 代替。 - false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接