12

Windows でコマンド プロンプトを実行している場合、clearコマンドを入力して画面をクリアできます。swiplWindows で (コマンド プロンプトに入力して) swipl prolog を実行しているときに、同じことをどのように行うのですか?

4

1 に答える 1

23

UNIX 端末では、library(tty)リソース と がtty_clear/0ありますが、Windows 端末では端末ライブラリがサポートされていません。ただし、ANSI エスケープ コードはサポートしています。

ESCエスケープ コードは、 (エスケープ) 文字で始まる文字シーケンスASCII 0x1B = 27です。ほとんどの場合、コントロール シーケンス イントロデューサで始まります。これは、エスケープとそれに続く左ブラッカー: ESC [として知られていCSIます。

したがって、スクリーン クリアのコード シーケンスを発行できます。これは ED (データの消去) コマンドであり、次の形式を取ります。

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

format/2SWI-Prolog から、これはプリミティブを使用して発行できます。

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

MSDOS ANSI 処理での ED 2 コマンド、full terminal clear は、カーソルを左上にリセットしますが、必ずしもすべての端末でそうであるとは限らないため、CUP (Cursor Position) コマンドと組み合わせてリセットするのが最適です。 to home は単純に: 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 に答える