Come posso cancellare lo schermo del terminale in Haskell?


93

Come posso cancellare la schermata di un terminale dopo che il mio utente ha selezionato un'opzione dal menu della mia applicazione?


2
Puoi essere più chiaro su quale sistema di interfaccia utente stai utilizzando nel tuo programma Haskell? Vuoi dire che stai semplicemente leggendo e scrivendo testo in stdin / stdout? Se è così, quelli non hanno un concetto implicito di "schermo". Se intendi che il tuo programma funzioni assumendo che ci sia un terminale collegato a stdin / stdout, allora dovresti codificare il tuo programma per utilizzare un pacchetto di controllo del terminale, come la risposta indicata da @ZackS.
MtnViewMark

2
Scegli la risposta corretta. Le persone devono esaminare tutte le risposte!
Shishir Gupta

Risposte:


195

:! eseguire il comando della shell
:! Cls sotto le finestre
! chiaro sotto Linux e OS X


2
c'è qualche cheatsheet per ghci?
tugberk

2
@Peter la mia ipotesi migliore è che sia perché non pensano che sia una soluzione haskell (giustamente, funziona solo in GHCi), non funziona per loro (dipendente dalla shell) o semplicemente considerano la risposta di ZachS una migliore . :! clsè abbastanza sufficiente per il mio caso d'uso ma non funziona per il caso del richiedente in quanto il richiedente non sta usando GHCi.
John Dvorak

58

Questo è quello che potresti cercare:

terminale ansi: semplice supporto del terminale ANSI, con compatibilità con Windows

Puoi trovarlo in Hackage e installarlo usando cabal install ansi-terminal. Ha specificamente funzioni per pulire lo schermo, visualizzare i colori, spostare il cursore, ecc.

Usarlo per cancellare lo schermo è facile: (questo è con GHCI)

import System.Console.ANSI

clearScreen


4
Questa è la risposta corretta. Prova a cercare il pacchetto nel gestore pacchetti del tuo sistema, poiché cabal generalmente non funziona con quello e non offre un comando di disinstallazione.
Evi1M4chine

13

Su un terminale che comprende le sequenze di escape ANSI (credo ogni termine nei sistemi Unix / Linux) puoi farlo semplicemente con:

clear = putStr "\ESC[2J"

Il 2cancella l'intero schermo. È possibile utilizzare rispettivamente 0o 1se si desidera cancellare dal cursore alla fine dello schermo o dal cursore all'inizio dello schermo.

Tuttavia non credo che funzioni nella shell di Windows.



8

Sui sistemi Unix puoi farlo System.system "clear"semplicemente invoca l'utilità della riga di comando clear. Per una soluzione che non dipende da strumenti esterni, avresti bisogno di una libreria che astragga su diversi tipi di terminale come ad esempio ansi-terminal .


8
@Pradeep: Sì, e ho risposto in haskell.
sepp2k

8
@Pradeep: non c'è bisogno di gridare. (Vedi en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike

5

Un modo rapido su Windows sarebbe quello di

import System.Process

clear :: IO ()
clear = system "cls"

Questa è stata la soluzione più pulita per me e per i sistemi Linux system "clear.
Iain J. Reid

5

Su Windows, usa Ctrl + L per il terminale del prompt dei comandi Haskell. E, per la GUI utilizzare Ctrl + S .


0

Sotto Linux (Ubuntu almeno), questo è il codice che uso per cancellare il terminale:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.