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?


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.


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


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.




5

Ein schneller Weg unter Windows wäre zu

import System.Process

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

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 .


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 ()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.