Bagaimana cara menghapus layar terminal di Haskell?

93

Bagaimana cara saya menghapus layar terminal setelah pengguna saya memilih opsi dari menu aplikasi saya?

Nubkadiya
sumber
2
Bisakah Anda lebih jelas tentang sistem antarmuka pengguna yang Anda gunakan dalam program Haskell? Apakah maksud Anda Anda hanya membaca dan menulis teks ke stdin / stdout? Jika demikian, mereka tidak memiliki konsep implisit tentang "layar". Jika Anda bermaksud program Anda untuk bekerja dengan asumsi bahwa ada terminal yang terpasang ke stdin / stdout, maka Anda harus mengkodekan program Anda untuk menggunakan beberapa paket kontrol terminal, seperti yang ditunjukkan pada jawaban @ZackS.
MtnViewMark
2
Silakan pilih jawaban yang benar. Orang harus melalui semua jawaban!
Shishir Gupta

Jawaban:

198

:! jalankan perintah shell
:! CLS di bawah jendela
! jelas di bawah linux dan OS X

kosong
sumber
2
apakah ada lembar contekan untuk ghci?
tugberk
2
@Peter tebakan terbaik saya adalah karena mereka tidak menganggapnya sebagai solusi haskell (memang demikian; ini hanya berfungsi di GHCi), tidak berfungsi untuk mereka (bergantung pada shell) atau mereka hanya menganggap jawaban ZachS lebih baik . :! clscukup memadai untuk kasus penggunaan saya tetapi tidak berfungsi untuk kasus penanya karena penanya tidak menggunakan GHCi.
John Dvorak
58

Inilah yang mungkin Anda cari:

ansi-terminal: Dukungan terminal ANSI sederhana, dengan kompatibilitas Windows

Anda dapat menemukannya di Hackage dan menginstal menggunakan cabal install ansi-terminal. Ini secara khusus memiliki fungsi untuk membersihkan layar, menampilkan warna, menggerakkan kursor, dll.

Menggunakannya untuk membersihkan layar itu mudah: (ini dengan GHCI)

import System.Console.ANSI

clearScreen

ZachS
sumber
4
Ini jawaban yang benar. Cobalah untuk mencari paket di manajer paket sistem Anda, karena komplotan rahasia umumnya tidak bekerja dengan itu dan tidak menawarkan perintah uninstall.
Evi1M4chine
14

Di terminal yang memahami urutan escape ANSI (saya percaya setiap istilah dalam sistem Unix / Linux) Anda dapat melakukannya hanya dengan:

clear = putStr "\ESC[2J"

The 2membersihkan seluruh layar. Anda dapat menggunakan 0atau 1masing - masing jika Anda ingin menghapus dari kursor ke ujung layar atau dari kursor ke awal layar.

Namun saya tidak berpikir ini berfungsi di shell Windows.

Federico Squartini
sumber
11

Cukup tekan Ctrl + L (berfungsi di Windows)

mitaness
sumber
1
Berfungsi pada macOS juga
oluckyman
Bekerja di ubuntu + zsh juga.
Tejaswi Yerukalapudi
8

Pada sistem Unix Anda dapat melakukan System.system "clear"yang hanya memanggil utilitas baris perintah clear. Untuk solusi yang tidak bergantung pada alat eksternal, Anda memerlukan pustaka yang mengabstraksikan berbagai jenis terminal seperti misalnya ansi-terminal .

sepp2k.dll
sumber
8
@ Pradeep: Ya, dan saya menjawab dengan haskell.
sepp2k
8
@Pradeep: Tidak perlu berteriak. (Lihat en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike
5

Cara cepat di Windows adalah dengan

import System.Process

clear :: IO ()
clear = system "cls"
Boris
sumber
Ini adalah solusi terbersih untuk saya, dan untuk penggunaan sistem Linux system "clear.
Iain J. Reid
5

Di Windows, gunakan Ctrl + L untuk terminal command prompt Haskell. Dan, untuk GUI menggunakan Ctrl + S .

Shuvam Shah
sumber
0

Di Linux (setidaknya Ubuntu), itulah kode yang saya gunakan untuk membersihkan terminal:

import qualified System.Process as SP

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