Como posso limpar uma tela de terminal depois que meu usuário selecionar uma opção do menu do meu aplicativo?
Como posso limpar uma tela de terminal depois que meu usuário selecionar uma opção do menu do meu aplicativo?
Respostas:
:! execute o comando shell
:! CLS no Windows
: limpar no Linux e OS X
:! 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.
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 usandocabal 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
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 0
ou, 1
respectivamente, 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.
Basta pressionar Ctrl + L (funciona no Windows)
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 .
Uma maneira rápida no Windows seria
import System.Process
clear :: IO ()
clear = system "cls"
system "clear
.
No Windows, use Ctrl + L para o terminal de prompt de comando Haskell. E, por GUI usar Ctrl + S .
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 ()