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
@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)
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.
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 .
Odpowiedzi:
:! uruchom polecenie powłoki
:! CLS pod oknami
! jasne pod Linuksem i OS X
źródło
:! cls
jest wystarczające dla mojego przypadku użycia, ale nie działa w przypadku pytającego, ponieważ pytający nie używa GHCi.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
źródło
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"
2
Czyści cały ekran. Możesz użyć odpowiednio0
lub,1
jeś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.
źródło
Po prostu naciśnij Ctrl + L (działa w systemie Windows)
źródło
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 .źródło
Szybkim sposobem na Windows byłoby
import System.Process clear :: IO () clear = system "cls"
źródło
system "clear
.W systemie Windows użyj Ctrl + L dla terminala wiersza polecenia Haskell. A dla GUI użyć Ctrl + S .
źródło
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 ()
źródło