Quando si esegue il prompt dei comandi in Windows è possibile digitare il comando clear
per cancellare lo schermo. Come si fa la stessa cosa quando si esegue Swift Prolog (digitando swipl
nel prompt dei comandi) in Windows?Schermata di cancellazione in prolog Swipl in windows
risposta
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').
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
@CapelliC: Utile, non sapevo che supportasse' \ e', una raffinatezza molto più pulita. – Orbling
@CapelliC: '\ e' non è ISO e viene rifiutato da GNU e SICStus. Usa invece '\ 33 \'. – false