Como faço para limpar a tela do terminal em Haskell?


93

Como posso limpar uma tela de terminal depois que meu usuário selecionar uma opção do menu do meu aplicativo?


2
Você pode ser mais claro sobre o sistema de interface do usuário que está usando no programa Haskell? Você quer dizer que está simplesmente lendo e escrevendo texto em stdin / stdout? Nesse caso, eles não têm nenhum conceito implícito de "tela". Se você pretende que seu programa funcione assumindo que há um terminal conectado a stdin / stdout, então você deve codificar seu programa para usar algum pacote de controle de terminal, como a resposta indicada de @ZackS.
MtnViewMark

2
Escolha a resposta correta. As pessoas têm que passar por todas as respostas!
Shishir Gupta

Respostas:


195

:! execute o comando shell
:! CLS no Windows
: limpar no Linux e OS X


2
existe algum cheatsheet para ghci?
tugberk de

2
@Peter, meu melhor palpite é que eles não acham que seja uma solução haskell (com razão; funciona apenas no GHCi), não funciona para eles (dependente de shell) ou eles apenas consideram a resposta de ZachS uma melhor . :! clsé suficiente para o meu caso de uso, mas não funciona para o caso do autor da pergunta, pois o autor da pergunta não está usando GHCi.
John Dvorak

58

Isso é o que você pode estar procurando:

ansi-terminal: Suporte a terminal ANSI simples, com compatibilidade com Windows

Você pode encontrá-lo em Hackage e instalar usando cabal install ansi-terminal. Ele tem funções específicas para limpar a tela, exibir cores, mover o cursor, etc.

Usá-lo para limpar a tela é fácil: (isso é com GHCI)

import System.Console.ANSI

clearScreen


4
Essa é a resposta correta. Tente procurar o pacote no gerenciador de pacotes do seu sistema, pois o cabal geralmente não funciona com isso e não oferece um comando de desinstalação.
Evi1M4chine

13

Em um terminal que entende sequências de escape ANSI (acredito que todos os termos em sistemas Unix / Linux), você pode fazer isso simplesmente com:

clear = putStr "\ESC[2J"

o 2 limpa a tela inteira. Você pode usar 0ou, 1respectivamente, se desejar limpar do cursor ao final da tela ou do cursor ao início da tela.

No entanto, não acho que isso funcione no shell do Windows.



8

Em sistemas Unix, você pode fazer o System.system "clear"que apenas invoca o utilitário de linha de comando clear. Para uma solução que não dependa de ferramentas externas, você precisaria de uma biblioteca que abstraia sobre diferentes tipos de terminais como, por exemplo, ansi-terminal .


8
@Pradeep: Sim, e respondi em haskell.
sepp2k de

8
@Pradeep: Não precisa gritar. (Veja en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike

5

Uma maneira rápida no Windows seria

import System.Process

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

Esta foi a solução mais limpa para mim e para uso em sistemas Linux system "clear.
Iain J. Reid

5

No Windows, use Ctrl + L para o terminal de prompt de comando Haskell. E, por GUI usar Ctrl + S .


0

No Linux (Ubuntu pelo menos), esse é o código que uso para limpar o terminal:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.