Jak wyczyścić ekran terminala w Haskell?


93

Jak mogę wyczyścić ekran terminala po wybraniu przez użytkownika opcji z menu mojej aplikacji?


2
Czy możesz bardziej precyzyjnie określić, jakiego systemu interfejsu użytkownika używasz w programie Haskell? Czy masz na myśli, że po prostu czytasz i piszesz tekst na stdin / stdout? Jeśli tak, to nie mają one ukrytej koncepcji „ekranu”. Jeśli zamierzasz program działać przy założeniu, że do stdin / stdout dołączony jest terminal, to powinieneś kodować swój program tak, aby używał jakiegoś pakietu kontrolnego terminala, takiego jak wskazana odpowiedź @ZackS.
MtnViewMark

2
Wybierz poprawną odpowiedź. Ludzie muszą przejść przez wszystkie odpowiedzi!
Shishir Gupta

Odpowiedzi:


198

:! uruchom polecenie powłoki
:! CLS pod oknami
! jasne pod Linuksem i OS X


2
czy jest jakaś ściągawka do ghci?
tugberk

2
@Peter, przypuszczam, że to dlatego, że nie uważają, że jest to rozwiązanie typu haskell (słusznie; działa tylko w GHCi), nie działa dla nich (zależne od powłoki) lub po prostu uważają odpowiedź ZachSa za lepszą . :! clsjest wystarczające dla mojego przypadku użycia, ale nie działa w przypadku pytającego, ponieważ pytający nie używa GHCi.
John Dvorak

58

Oto, czego możesz szukać:

ansi-terminal: prostego terminala ANSI z kompatybilnością z Windows

Możesz go znaleźć w Hackage i zainstalować za pomocą cabal install ansi-terminal . W szczególności ma funkcje do czyszczenia ekranu, wyświetlania kolorów, przesuwania kursora itp.

Używanie go do czyszczenia ekranu jest łatwe: (to jest z GHCI)

import System.Console.ANSI

clearScreen


4
To jest poprawna odpowiedź. Spróbuj jednak poszukać pakietu w menedżerze pakietów twojego systemu, ponieważ cabal generalnie nie działa z tym i nie oferuje polecenia odinstalowania.
Evi1M4chine

14

Na terminalu, który rozumie sekwencje specjalne ANSI (wierzę, że każdy termin w systemach Unix / Linux) możesz to zrobić po prostu za pomocą:

clear = putStr "\ESC[2J"

2Czyści cały ekran. Możesz użyć odpowiednio 0lub, 1jeśli chcesz wyczyścić od kursora do końca ekranu lub od kursora do początku ekranu.

Jednak nie sądzę, żeby to działało w powłoce Windows.



8

W systemach uniksowych możesz zrobić, System.system "clear"co po prostu wywołuje narzędzie wiersza poleceń clear. W przypadku rozwiązania, które nie zależy od narzędzi zewnętrznych, potrzebna byłaby biblioteka, która abstrahuje od różnych typów terminali, takich jak na przykład ansi-terminal .


8
@Pradeep: Tak, i odpowiedziałem w haskell.
wrzesień

8
@Pradeep: Nie musisz krzyczeć. (Zobacz en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike,

5

Szybkim sposobem na Windows byłoby

import System.Process

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

To było najczystsze rozwiązanie dla mnie i dla systemów Linux system "clear.
Iain J. Reid

5

W systemie Windows użyj Ctrl + L dla terminala wiersza polecenia Haskell. A dla GUI użyć Ctrl + S .


0

Pod Linuksem (przynajmniej Ubuntu) jest to kod, którego używam do czyszczenia terminala:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.