97 votes

Comment effacer l'écran du terminal en Haskell ?

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

2 votes

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 c'est le cas, ceux-ci n'ont pas de concept implicite d'"écran". Si vous voulez que votre programme fonctionne en supposant qu'un terminal est connecté à stdin/stdout, vous devez coder votre programme pour qu'il utilise un paquet de contrôle de terminal, comme indiqué dans la réponse de @ZackS.

2 votes

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

204voto

void Points 487

: ! exécuter la commande shell
: ! cls sous Windows
: ! clair sous linux et OS X

2 votes

Existe-t-il une feuille de route pour le ghci ?

2 votes

@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épendant du shell) ou ils considèrent simplement que la réponse de ZachS est meilleure. :! cls est largement suffisant pour mon cas d'utilisation mais ne fonctionne pas pour le cas du demandeur car celui-ci n'utilise pas GHCi.

60voto

ZachS Points 782

C'est ce que vous recherchez peut-être :

ansi-terminal : Prise en charge simple des terminaux ANSI, avec compatibilité avec Windows

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

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

`import System.Console.ANSI

clearScreen`

4 votes

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

14voto

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 site 2 efface tout l'écran. Vous pouvez utiliser 0 o 1 respectivement si vous voulez 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.

8voto

sepp2k Points 157757

Sur les systèmes Unix, vous pouvez faire System.system "clear" qui invoque 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 fait abstraction des différents types de terminaux, comme par exemple ansi-terminal .

8 votes

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

8 votes

@Pradeep : Pas besoin de crier. (Voir fr.wikipedia.org/wiki/All_caps#Internet )

7voto

Boris Points 2390

Un moyen rapide sous Windows serait de

import System.Process

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

0 votes

C'était la solution la plus propre pour moi, et pour les systèmes Linux, utilisez system "clear .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X