Comment effacer l'écran du terminal dans Haskell?


93

Comment puis-je effacer un écran de terminal après que mon utilisateur a sélectionné une option dans le menu de mon application?


2
Pouvez-vous être plus clair sur le système d'interface utilisateur que vous utilisez dans votre programme Haskell? Voulez-vous dire que vous lisez et écrivez simplement du texte sur stdin / stdout? Si tel est le cas, ceux-ci n'ont pas de concept implicite d '"écran". Si vous avez l'intention de faire fonctionner votre programme en supposant qu'un terminal est attaché à stdin / stdout, alors vous devriez coder votre programme pour utiliser un package de contrôle de terminal, tel que la réponse de @ZackS indiquée.
MtnViewMark

2
Veuillez choisir la bonne réponse. Les gens doivent passer par toutes les réponses!
Shishir Gupta

Réponses:


195

:! exécutez la commande shell
:! cls sous Windows
: clair sous Linux et OS X


2
y a-t-il une feuille de triche pour ghci?
tugberk

2
@Peter ma meilleure supposition est que c'est parce qu'ils ne pensent pas que c'est une solution haskell (à juste titre; cela ne fonctionne que dans GHCi), cela ne fonctionne pas pour eux (dépend du shell) ou ils considèrent simplement la réponse de ZachS comme une meilleure. . :! clsest amplement suffisant pour mon cas d'utilisation mais ne fonctionne pas pour le cas du demandeur car celui-ci n'utilise pas GHCi.
John Dvorak le

58

Voici ce que vous recherchez peut-être:

ansi-terminal: prise en charge simple du terminal ANSI, avec compatibilité Windows

Vous pouvez le trouver dans Hackage et l'installer en utilisant cabal install ansi-terminal. Il a spécifiquement des fonctions pour effacer l'écran, afficher les couleurs, déplacer le curseur, etc.

L'utiliser pour effacer l'écran est facile: (c'est avec GHCI)

import System.Console.ANSI

clearScreen


4
C'est la bonne réponse. Essayez cependant de rechercher le paquet dans le gestionnaire de paquets de votre système, car cabal ne fonctionne généralement pas avec cela et n'offre pas de commande de désinstallation.
Evi1M4chine

14

Sur un terminal qui comprend les séquences d'échappement ANSI (je crois que tous les termes des systèmes Unix / Linux), vous pouvez le faire simplement avec:

clear = putStr "\ESC[2J"

Le 2efface tout l'écran. Vous pouvez utiliser respectivement 0ou 1si vous souhaitez effacer du curseur à la fin de l'écran ou du curseur au début de l'écran.

Cependant, je ne pense pas que cela fonctionne dans le shell Windows.



8

Sur les systèmes Unix, vous pouvez faire System.system "clear"ce qui appelle simplement l'utilitaire de ligne de commande clear. Pour une solution qui ne dépend pas d'outils externes, vous auriez besoin d'une bibliothèque qui résume sur différents types de terminaux comme par exemple ansi-terminal .


8
@Pradeep: Oui, et j'ai répondu en haskell.
sepp2k

8
@Pradeep: Pas besoin de crier. (Voir en.wikipedia.org/wiki/All_caps#Internet )
Jared Updike

5

Un moyen rapide sur Windows serait de

import System.Process

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

C'était la solution la plus propre pour moi et pour l'utilisation des systèmes Linux system "clear.
Iain J. Reid

5

Sous Windows, utilisez Ctrl + L pour le terminal d'invite de commande Haskell. Et, pour utiliser l' interface graphique Ctrl + S .


0

Sous Linux (Ubuntu au moins), c'est le code que j'utilise pour effacer le terminal:

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.