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?

Nubkadiya
la source
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

néant
la source
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

ZachS
la source
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.

Federico Squartini
la source
11

Appuyez simplement sur Ctrl + L (fonctionne sous Windows)

mitaness
la source
1
Fonctionne aussi sur macOS
oluckyman
Fonctionne également sur ubuntu + zsh.
Tejaswi Yerukalapudi
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 .

sepp2k
la source
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"
Boris
la source
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 .

Shuvam Shah
la source
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 ()
Stéphane Rolland
la source