¿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?


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


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


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.



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 .


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"

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 .


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 ()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.