2013-06-04 11 views

Odpowiedz

14

Na terminalach UNIX istnieje zasób library(tty) i ma on tty_clear/0, ale terminale Windows nie obsługują biblioteki terminali. Jednak obsługują one ANSI Escape Codes.

Kody ucieczki to sekwencje znaków zaczynające się od ESC (znak ucieczki), ASCII 0x1B = 27. Większość zaczyna się od wprowadzenia sekwencji kontrolnej, która jest ucieczką, po której następuje lewa bracker: ESC [, znana jako CSI.

Więc można wydać sekwencję kodu na ekranie jasny, która jest ED (usuwanie danych) komenda, która przybiera postać:

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

Od SWI-Prolog to mogą być wydawane za pomocą format/2 prymitywny .

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

Polecenie DE 2, pełna zacisk jasne na obsługę MS-DOS ANSI resetuje wskaźnik do górnej lewej, ale nie jest to konieczne w przypadku wszystkich terminali, tak, najlepiej w połączeniu z pojemnika (pozycji kursora), które jako reset do domu to po prostu: CSI H.

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

Aktualizacja: Uproszczenie

Dzięki @CapelliC dla alternatywnego i jaśniejszej formie, przy użyciu kodu \e ucieczki do ucieczki!

Plain jasny ekran:

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

Albo z resetem domu:

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

Niezły chwyt. Zapomniałem o sekwencjach ANSI. Możesz wyrazić ESC, jak \ e, a tym samym zapisać w pliku konfiguracyjnym SWI-Prolog procedurę: 'cls: - write ('\ e [2J'). 'Lub' cls: - write (' \ e [H \ e [ 2J '). ' – CapelliC

+0

@CapelliC: Przydatne, nie wiedziałem, że obsługuje' \ e', znacznie czystsze wyrafinowanie. – Orbling

+0

@CapelliC: '\ e' nie jest ISO i jest odrzucane przez GNU i SICStus. Zamiast tego użyj '\ 33 \'. – false