¿Cómo borro la pantalla del terminal en Haskell?

93

¿Cómo puedo borrar una pantalla de terminal después de que mi usuario ha seleccionado una opción del menú de mi aplicación?

Nubkadiya
fuente
2
¿Puede ser más claro sobre qué sistema de interfaz de usuario está utilizando en su programa Haskell? ¿Quiere decir que simplemente está leyendo y escribiendo texto en stdin / stdout? Si es así, esos no tienen un concepto implícito de "pantalla". Si tiene la intención de que su programa funcione asumiendo que hay una terminal adjunta a stdin / stdout, entonces debería estar codificando su programa para usar algún paquete de control de terminal, como la respuesta de @ZackS indicada.
MtnViewMark
2
Por favor seleccione la respuesta correcta. ¡La gente tiene que pasar por todas las respuestas!
Shishir Gupta

Respuestas:

195

:! ejecutar el comando de shell
:! CLS debajo de las ventanas
: claro en linux y OS X

vacío
fuente
2
¿Hay alguna hoja de trucos para ghci?
tugberk
2
@ Peter, mi mejor suposición es que se debe a que no creen que sea una solución de Haskell (con razón; solo funciona en GHCi), no les funciona (depende del shell) o simplemente consideran que la respuesta de ZachS es mejor . :! clses suficiente para mi caso de uso, pero no funciona para el caso del autor de la pregunta, ya que el autor de la pregunta no está usando GHCi.
John Dvorak
58

Esto es lo que puede estar buscando:

ansi-terminal: soporte de terminal ANSI simple, con compatibilidad con Windows

Puede encontrarlo en Hackage e instalarlo usando cabal install ansi-terminal. Específicamente tiene funciones para limpiar la pantalla, mostrar colores, mover el cursor, etc.

Usarlo para limpiar la pantalla es fácil: (esto es con GHCI)

import System.Console.ANSI

clearScreen

ZachS
fuente
4
Esta es la respuesta correcta. Sin embargo, intente buscar el paquete en el administrador de paquetes de su sistema, ya que cabal generalmente no funciona con eso y no ofrece un comando de desinstalación.
Evi1M4chine
14

En una terminal que comprende las secuencias de escape ANSI (creo que todos los términos en los sistemas Unix / Linux) puede hacerlo simplemente con:

clear = putStr "\ESC[2J"

El 2borra toda la pantalla. Puede utilizar 0o 1respectivamente si desea borrar desde el cursor hasta el final de la pantalla o desde el cursor hasta el principio de la pantalla.

Sin embargo, no creo que esto funcione en el shell de Windows.

Federico Squartini
fuente
11

Simplemente presione Ctrl + L (funciona en Windows)

mitaness
fuente
1
También funciona en macOS
oluckyman
También funciona en ubuntu + zsh.
Tejaswi Yerukalapudi
8

En sistemas Unix puede hacer lo System.system "clear"que simplemente invoca la utilidad de línea de comandos clear. Para una solución que no dependa de herramientas externas, necesitaría una biblioteca que resuma diferentes tipos de terminales como, por ejemplo, ansi-terminal .

sepp2k
fuente
8
@Pradeep: Sí, y respondí en Haskell.
sepp2k
8
@Pradeep: No es necesario gritar. (Ver en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike
5

Una forma rápida en Windows sería

import System.Process

clear :: IO ()
clear = system "cls"
Boris
fuente
Esta fue la solución más limpia para mí y para el uso de sistemas Linux system "clear.
Iain J. Reid
5

En Windows, use Ctrl + L para el terminal del símbolo del sistema de Haskell. Y, para el GUI usar Ctrl + S .

Shuvam Shah
fuente
0

Bajo Linux (Ubuntu al menos), ese es el código que uso para borrar la terminal:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
Stephane Rolland
fuente