【问题标题】:Clearing Screen in Swipl prolog in windows [duplicate]Windows中Swipl序言中的清除屏幕[重复]
【发布时间】:2013-05-30 07:31:44
【问题描述】:

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

【问题讨论】:

    标签: windows shell command-line prolog


    【解决方案1】:

    在 unix 终端上,有 library(tty) 资源和 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').
    

    【讨论】:

    • 不错的收获。我忘记了ANSI序列。您可以将 ESC 表示为 \e,从而将过程存储在 SWI-Prolog 配置文件中:cls :- write('\e[2J').cls :- write('\e[H\e[2J').
    • @CapelliC:有用,我不知道它支持\e,更清晰的改进。
    • @CapelliC: \e 不是 ISO,被 GNU 和 SICStus 拒绝。请改用\33\
    猜你喜欢
    • 2017-09-15
    • 2016-01-15
    • 2011-04-08
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多