Wie lösche ich den Terminalbildschirm in Haskell?

92

Wie kann ich einen Terminalbildschirm löschen, nachdem mein Benutzer eine Option aus dem Menü meiner Anwendung ausgewählt hat?

Nubkadiya
quelle
2
Können Sie klarer sagen, welches Benutzeroberflächensystem Sie in Ihrem Haskell-Programm verwenden? Meinen Sie damit, dass Sie einfach Text in stdin / stdout lesen und schreiben? Wenn ja, haben diese kein implizites Konzept von "Bildschirm". Wenn Sie beabsichtigen, dass Ihr Programm unter der Annahme funktioniert, dass an stdin / stdout ein Terminal angeschlossen ist, sollten Sie Ihr Programm so codieren, dass ein Terminalsteuerungspaket verwendet wird, z. B. die Antwort von @ZackS.
MtnViewMark
2
Bitte wählen Sie die richtige Antwort. Die Leute müssen alle Antworten durchgehen!
Shishir Gupta

Antworten:

194

:! Führen Sie den Shell-Befehl aus
:! cls unter Windows
:! klar unter Linux und OS X.

Leere
quelle
2
Gibt es ein Cheatsheet für Ghci?
Tugberk
2
@Peter Ich vermute, es liegt daran, dass sie nicht glauben, dass es sich um eine Haskell-Lösung handelt (zu Recht; es funktioniert nur in GHCi), dass es für sie nicht funktioniert (Shell-abhängig) oder dass sie die Antwort von ZachS einfach für eine bessere halten . :! clsist ausreichend für meinen Anwendungsfall, funktioniert aber nicht für den Fall des Fragestellers, da der Fragesteller kein GHCi verwendet.
John Dvorak
58

Dies ist, was Sie vielleicht suchen:

ansi-terminal: Einfache ANSI-Terminal-Unterstützung mit Windows-Kompatibilität

Sie können es in Hackage finden und mit installieren cabal install ansi-terminal. Es verfügt speziell über Funktionen zum Löschen des Bildschirms, Anzeigen von Farben, Bewegen des Cursors usw.

Das Löschen des Bildschirms ist einfach: (Dies ist mit GHCI)

import System.Console.ANSI

clearScreen

ZachS
quelle
4
Dies ist die richtige Antwort. Versuchen Sie jedoch, im Paketmanager Ihres Systems nach dem Paket zu suchen, da cabal im Allgemeinen damit nicht funktioniert und keinen Deinstallationsbefehl anbietet.
Evi1M4chine
13

Auf einem Terminal, das ANSI-Escape-Sequenzen versteht (ich glaube, jeder Begriff in Unix / Linux-Systemen), können Sie dies einfach tun mit:

clear = putStr "\ESC[2J"

Das 2löscht den gesamten Bildschirm. Sie können 0bzw. 1verwenden, wenn Sie vom Cursor zum Ende des Bildschirms oder vom Cursor zum Anfang des Bildschirms löschen möchten.

Ich denke jedoch nicht, dass dies in der Windows-Shell funktioniert.

Federico Squartini
quelle
11

Drücken Sie einfach Strg + L (funktioniert unter Windows)

Mitaness
quelle
1
Funktioniert auch unter MacOS
Oluckyman
Funktioniert auch mit Ubuntu + Zsh.
Tejaswi Yerukalapudi
8

Auf Unix-Systemen können Sie dies tun System.system "clear", indem Sie einfach das Befehlszeilenprogramm clear aufrufen. Für eine Lösung, die nicht von externen Tools abhängt, benötigen Sie eine Bibliothek, die über verschiedene Terminaltypen wie z. B. ansi-terminal abstrahiert .

sepp2k
quelle
8
@ Pradeep: Ja, und ich antwortete in haskell.
sepp2k
8
@ Pradeep: Kein Grund zu schreien. (Siehe en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike
5

Ein schneller Weg unter Windows wäre zu

import System.Process

clear :: IO ()
clear = system "cls"
Boris
quelle
Dies war die sauberste Lösung für mich und für Linux-Systeme system "clear.
Iain J. Reid
5

Verwenden Sie unter Windows Strg + L für das Haskell-Eingabeaufforderungsterminal. Und für GUI verwenden Strg + S .

Shuvam Shah
quelle
0

Unter Linux (zumindest Ubuntu) ist dies der Code, den ich zum Löschen des Terminals verwende:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Stephane Rolland
quelle