2013-06-04 7 views

risposta

14

Sui terminali unix, c'è la risorsa library(tty) e che ha tty_clear/0, ma i terminali Windows non supportano la libreria terminale. Tuttavia, supportano ANSI Escape Codes.

I codici di escape sono sequenze di caratteri a partire dal carattere ESC (escape), ASCII 0x1B = 27. La maggior parte inizia con l'introduttore della sequenza di controllo, che è l'escape seguito da una parentesi sinistra: ESC [, noto come CSI.

in modo da poter emettere la sequenza di codice per uno schermo trasparente, che è la disfunzione erettile (cancellazione dei dati) di comando, che assume la forma:

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

Da SWI-Prolog questo può essere rilasciato utilizzando il format/2 primitiva .

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

Il comando ED 2, completo terminale chiara, sulla manipolazione MSDOS ANSI reimposta il cursore in alto a sinistra, ma che non è necessariamente il caso su tutti i terminali, in modo migliore per combinare con il CUP (posizione del cursore), che come reset su home è semplicemente: CSI H.

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

Aggiornamento: semplificazione

Grazie a @CapelliC per un sostituto forma più chiara, utilizzando il codice \e fuga per fuga!

Plain schermo chiaro:

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

O con reset casa:

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

Bella presa. Ho dimenticato le sequenze ANSI. Puoi esprimere ESC come \ e, e quindi memorizzare nel file di configurazione SWI-Prolog la procedura: 'cls: - write ('\ e [2J').' Or 'cls: - write ('\ e [H \ e [ 2J '). ' – CapelliC

+0

@CapelliC: Utile, non sapevo che supportasse' \ e', una raffinatezza molto più pulita. – Orbling

+0

@CapelliC: '\ e' non è ISO e viene rifiutato da GNU e SICStus. Usa invece '\ 33 \'. – false