Как очистить экран терминала в 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.

Федерико Сквартини
источник
11

Просто нажмите Ctrl + L (работает в Windows)

мягкость
источник
1
Работает и на macOS
oluckyman
Также работает с ubuntu + zsh.
Tejaswi Yerukalapudi
8

В системах Unix вы можете сделать System.system "clear"это, просто запустив утилиту командной строки clear. Для решения, которое не зависит от внешних инструментов, вам понадобится библиотека, которая абстрагируется от разных типов терминалов, например, от ansi-terminal .

sepp2k
источник
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 ()
Стефан Роллан
источник