Как очистить экран терминала в Haskell?


93

Как я могу очистить экран терминала после того, как мой пользователь выбрал опцию в меню моего приложения?


2
Не могли бы вы пояснить, какую систему пользовательского интерфейса вы используете в своей программе на Haskell? Вы имеете в виду, что вы просто читаете и записываете текст в stdin / stdout? Если так, то у них нет неявного понятия «экран». Если вы хотите, чтобы ваша программа работала, предполагая, что к stdin / stdout подключен терминал, тогда вы должны кодировать свою программу для использования некоторого пакета управления терминалом, такого как указанный ответ @ZackS.
MtnViewMark

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

Ответы:


198

:! запустите команду оболочки
:! cls под окнами
:! очистить под linux и OS X


2
есть ли шпаргалка по ghci?
tugberk

2
@Peter, я думаю, это потому, что они не думают, что это решение haskell (справедливо; оно работает только в GHCi), оно не работает для них (зависит от оболочки) или они просто считают ответ Закса лучшим . :! clsвполне достаточно для моего варианта использования, но не работает для случая спрашивающего, поскольку запрашивающий не использует GHCi.
John Dvorak

58

Это то, что вы можете искать:

ansi-terminal: поддержка простого терминала ANSI с совместимостью с Windows

Вы можете найти его в Hackage и установить с помощью cabal install ansi-terminal. В нем есть функции очистки экрана, отображения цветов, перемещения курсора и т. Д.

Использовать его для очистки экрана очень просто: (это с GHCI)

import System.Console.ANSI

clearScreen


4
Это правильный ответ. Однако попробуйте поискать пакет в диспетчере пакетов вашей системы, так как cabal обычно не работает с этим и не предлагает команду удаления.
Evi1M4chine

14

На терминале, который понимает escape-последовательности ANSI (я считаю, что каждый термин в системах Unix / Linux) вы можете сделать это просто с помощью:

clear = putStr "\ESC[2J"

2Очищает весь экран. Вы можете использовать 0или 1соответственно, если хотите очистить от курсора до конца экрана или от курсора до начала экрана.

Однако я не думаю, что это работает в оболочке Windows.



8

В системах Unix вы можете сделать System.system "clear"это, просто запустив утилиту командной строки 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.