2013-06-04 9 views

答えて

14

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 

ED 2コマンド、クリアフル端末、MSDOS ANSI取り扱い上の左上にカーソルをリセットし、それは、必ずしもすべての端末のケースではない、CUP(カーソル位置と結合するようにベスト)コマンドは、家にリセットするだけで簡単です:CSI H

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

更新:簡素化の脱出のための\eエスケープコードを使って代替し、より明確な形のため@CapelliCから

おかげで、!

平野画面クリア:

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

や自宅のリセットを持つ:

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

ナイスキャッチ。私はANSIシーケンスを忘れていました。 \ eのようにESCを表現することができるので、SWI-Prologの設定ファイルに 'cls: - write( '\ e [2J')'または 'cls: - write( '\ e [H \ e [ 2J ')。' – CapelliC

+0

@CapelliC:役に立った、私はそれがより洗練された洗練された '\ e'をサポートしているか分からなかった。 – Orbling

+0

@CapelliC: '\ e'はISOではなく、GNUとSICStusによって拒否されます。代わりに '\ 33 \'を使用してください。 – false

関連する問題