Làm cách nào để xóa màn hình đầu cuối trong Haskell?


93

Làm cách nào để xóa màn hình đầu cuối sau khi người dùng của tôi đã chọn một tùy chọn từ menu ứng dụng của tôi?


2
Bạn có thể nói rõ hơn về hệ thống giao diện người dùng bạn đang sử dụng trong chương trình Haskell của mình không? Ý bạn là bạn chỉ đơn giản là đọc và viết văn bản vào stdin / stdout? Nếu vậy, những người đó không có khái niệm ngầm về "màn hình". Nếu bạn dự định chương trình của mình hoạt động với giả định rằng có một thiết bị đầu cuối được gắn với stdin / stdout, thì bạn nên mã hóa chương trình của mình để sử dụng một số gói điều khiển thiết bị đầu cuối, chẳng hạn như câu trả lời @ZackS được chỉ ra.
MtnViewMark

2
Hãy chọn câu trả lời đúng. Mọi người phải trải qua tất cả các câu trả lời!
Shishir Gupta

Câu trả lời:


195

:! chạy lệnh shell
:! cls dưới cửa sổ
:! rõ ràng trong Linux và OS X


2
có cheatsheet nào cho ghci không?
tugberk

2
@Peter dự đoán tốt nhất của tôi là vì họ không nghĩ rằng đó là giải pháp haskell (đúng là như vậy; nó chỉ hoạt động trong GHCi), nó không hoạt động với họ (phụ thuộc vào trình bao) hoặc họ chỉ coi câu trả lời của ZachS là một giải pháp tốt hơn . :! clslà đủ cho trường hợp sử dụng của tôi nhưng không hoạt động cho trường hợp của người hỏi vì người hỏi không sử dụng GHCi.
John Dvorak

58

Đây là những gì bạn có thể đang tìm kiếm:

ansi-terminal: Hỗ trợ đầu cuối ANSI đơn giản, với khả năng tương thích với Windows

Bạn có thể tìm thấy nó trong Hackage và cài đặt bằng cách sử dụng cabal install ansi-terminal. Nó đặc biệt có các chức năng xóa màn hình, hiển thị màu sắc, di chuyển con trỏ, v.v.

Sử dụng nó để xóa màn hình thật dễ dàng: (đây là với GHCI)

import System.Console.ANSI

clearScreen


4
Đây là câu trả lời chính xác. Tuy nhiên, hãy cố gắng tìm kiếm gói trong trình quản lý gói của hệ thống, vì cabal thường không hoạt động với điều đó và không đưa ra lệnh gỡ cài đặt.
Evi1M4chine

14

Trên một thiết bị đầu cuối hiểu các trình tự thoát ANSI (tôi tin rằng mọi thuật ngữ trong hệ thống Unix / Linux), bạn có thể làm điều đó đơn giản với:

clear = putStr "\ESC[2J"

Các 2xóa toàn bộ màn hình. Bạn có thể sử dụng 0hoặc 1tương ứng nếu bạn muốn xóa từ con trỏ đến cuối màn hình hoặc từ con trỏ đến đầu màn hình.

Tuy nhiên, tôi không nghĩ rằng điều này hoạt động trong Windows shell.



8

Trên hệ thống Unix, bạn có thể làm điều System.system "clear"đó chỉ cần gọi tiện ích dòng lệnh rõ ràng. Đối với một giải pháp không phụ thuộc vào các công cụ bên ngoài, bạn cần có một thư viện tóm tắt về các loại thiết bị đầu cuối khác nhau, chẳng hạn như ansi-terminal .


8
@Pradeep: Có, và tôi đã trả lời bằng haskell.
sepp2k

8
@Pradeep: Không cần hét. (Xem en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike

5

Một cách nhanh chóng trên Windows sẽ là

import System.Process

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

Đây là giải pháp sạch sẽ nhất cho tôi và cho việc sử dụng hệ thống Linux system "clear.
Iain J. Reid

5

Trên Windows, sử dụng Ctrl + L cho đầu cuối dấu nhắc lệnh Haskell. Và, cho GUI sử dụng tổ hợp phím Ctrl + S .


0

Trong Linux (ít nhất là Ubuntu), đó là mã tôi sử dụng để xóa thiết bị đầu cuối:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.