Jak mogę wyczyścić ekran terminala po wybraniu przez użytkownika opcji z menu mojej aplikacji?
Jak mogę wyczyścić ekran terminala po wybraniu przez użytkownika opcji z menu mojej aplikacji?
Odpowiedzi:
:! uruchom polecenie powłoki
:! CLS pod oknami
! jasne pod Linuksem i OS X
:! 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
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ć odpowiednio 0
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.
Po prostu naciśnij Ctrl + L (działa w systemie 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 .
Szybkim sposobem na Windows byłoby
import System.Process
clear :: IO ()
clear = system "cls"
system "clear
.
W systemie Windows użyj Ctrl + L dla terminala wiersza polecenia Haskell. A dla GUI użyć Ctrl + S .
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 ()