Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在windows中清除Swipl prolog中的屏幕_Windows_Shell_Command Line_Prolog - Fatal编程技术网

在windows中清除Swipl prolog中的屏幕

在windows中清除Swipl prolog中的屏幕,windows,shell,command-line,prolog,Windows,Shell,Command Line,Prolog,在windows中运行命令提示符时,可以键入clear命令以清除屏幕。在windows中运行swipl prolog(通过在命令提示符中键入swipl)时,如何执行相同的操作?在unix终端上,有库(tty)资源,但windows终端不支持终端库。然而,他们确实支持 转义码是以ESC(转义)字符开始的字符序列,ASCII 0x1B=27。大多数都是从控制序列导入器开始的,它是一个转义,然后是一个左括号:ESC[,称为CSI 因此,您可以发出屏幕清除的代码序列,即ED(擦除数据)命令,其形式如下:

在windows中运行命令提示符时,可以键入
clear
命令以清除屏幕。在windows中运行swipl prolog(通过在命令提示符中键入
swipl
)时,如何执行相同的操作?

在unix终端上,有
库(tty)
资源,但windows终端不支持终端库。然而,他们确实支持

转义码是以
ESC
(转义)字符开始的字符序列,
ASCII 0x1B=27
。大多数都是从控制序列导入器开始的,它是一个转义,然后是一个左括号:
ESC[
,称为
CSI

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

CSI 2 J   -- which expands to: ESC [ 2 J
从SWI Prolog,可以使用原语发出该命令

format('~c~s', [0x1b, "[2J"]). % issue CSI 2 J
MSDOS ANSI handling上的ED 2命令full terminal clear将光标重置为左上角,但并非所有终端都是如此,因此最好与CUP(光标位置)命令结合使用,该命令作为重置为home的简单命令:
CSI H

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

更新:简化

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

纯清晰屏幕:

cls :- write('\e[2J').
或使用主页重置:

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

很好的捕获。我忘记了ANSI序列。您可以像\e一样表达ESC,从而将过程存储在SWI Prolog配置文件中:
cls:-write('\e[2J')。
cls:-write('\e[H\e[2J')).
@capelical:有用,我不知道它支持
\e
,这是一种更干净的改进。@capelical:
\e
不是ISO,被GNU和SICStus拒绝。请改用
\33\