Як очистити екран терміналу в Haskell?


93

Як очистити екран терміналу після того, як користувач вибрав опцію в меню моєї програми?


2
Чи можете ви більш чітко зрозуміти, яку систему інтерфейсу користувача ви використовуєте у своїй програмі Haskell? Ви маєте на увазі, що ви просто читаєте та пишете текст на stdin / stdout? Якщо так, то у них немає неявного поняття "екран". Якщо ви плануєте, щоб ваша програма працювала, припускаючи, що до stdin / stdout приєднаний термінал, тоді вам слід кодувати свою програму, щоб використовувати якийсь пакет управління терміналом, наприклад, вказану відповідь @ZackS.
MtnViewMark

2
Виберіть правильну відповідь. Люди повинні пройти всі відповіді!
Шишир Гупта

Відповіді:


195

:! запустіть команду оболонки
:! ЦБС під вікнами
! ясно під Linux та OS X


2
чи є якась шпаргалка для ghci?
тугберк

2
@Peter, моє найкраще здогадування - це тому, що вони не вважають, що це рішення haskell (це справедливо; воно працює лише в GHCi), воно не працює для них (залежно від оболонки) або вони просто вважають відповідь ZachS кращою . :! clsдостатньо для мого випадку використання, але не працює для випадку учасника запиту, оскільки той, хто використовує запит, не використовує GHCi.
Джон Дворжак,

58

Це те, що ви можете шукати:

ansi-terminal: Проста підтримка терміналу ANSI із сумісністю з Windows

Ви можете знайти його в Hackage і встановити за допомогою cabal install ansi-terminal. Він спеціально має функції очищення екрана, відображення кольорів, переміщення курсору тощо.

Використовувати його для очищення екрану просто: (це стосується GHCI)

import System.Console.ANSI

clearScreen


4
Це правильна відповідь. Спробуйте пошукати пакет в диспетчері пакетів вашої системи, оскільки cabal зазвичай не працює з цим і не пропонує команду видалення.
Evi1M4chine

14

На терміналі, який розуміє послідовності виходу ANSI (я вважаю, кожен термін в системах Unix / Linux), ви можете зробити це просто за допомогою:

clear = putStr "\ESC[2J"

2Очищає весь екран. Ви можете використовувати 0або, 1відповідно, якщо ви хочете очистити від курсору до кінця екрана або від курсору до початку екрана.

Однак я не думаю, що це працює в оболонці Windows.



8

У системах Unix ви можете робити це, System.system "clear"що просто викликає утиліту командного рядка ясно. Для рішення, яке не залежить від зовнішніх інструментів, вам знадобиться бібліотека, яка абстрагується від різних типів терміналів, таких як, наприклад, ansi-terminal .


8
@Pradeep: Так, і я відповів у haskell.
sepp2k

8
@Pradeep: Не потрібно кричати. (Див. En.wikipedia.org/wiki/All_caps#Internet )
Джаред Апдайк,

5

Швидким способом в Windows буде

import System.Process

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

Це було найчистішим рішенням для мене та для систем Linux system "clear.
Іен Дж. Рід

5

У Windows використовуйте Ctrl + L для терміналу командного рядка Haskell. І для GUI використовувати Ctrl + S .


0

У Linux (принаймні Ubuntu) це код, який я використовую для очищення терміналу:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.