Haskellで端末画面をクリアするにはどうすればよいですか?


93

ユーザーがアプリケーションのメニューからオプションを選択した後、ターミナル画面をクリアするにはどうすればよいですか?


2
Haskellプログラムで使用しているユーザーインターフェイスシステムについて、より明確にできますか?stdin / stdoutでテキストを読み書きしているだけですか?もしそうなら、それらは「スクリーン」の暗黙の概念を持っていません。端末がstdin / stdoutに接続されていると想定してプログラムを動作させる場合は、@ ZackS 'の回答など、端末制御パッケージを使用するようにプログラムをコーディングする必要があります。
MtnViewMark 2010年

2
正しい答えを選んでください。人々はすべての答えを通過しなければなりません!
Shishir Gupta

回答:


195

:! シェルコマンドを実行する
:!CLS の窓の下で
:! LinuxとOS Xでクリア


2
ghciのチートシートはありますか?
tugberk 14

2
@ピーター私の推測では、それは彼らがそれがhaskellソリューションであると考えていないからです(正しくそうです。GHCiでのみ機能します)。 。:! cls私のユースケースには十分ですが、質問者はGHCiを使用していないため、質問者のケースでは機能しません。
John Dvorak

58

これはあなたが探しているものです:

ANSIターミナル: Windows互換のシンプルなANSI端末サポート

あなたはそれをハックで見つけてインストールすることができます cabal install ansi-terminal。特に、画面のクリア、色の表示、カーソルの移動などの機能があります。

それを使用して画面をクリアするのは簡単です:(これはGHCIで)

import System.Console.ANSI

clearScreen


4
これが正解です。ただし、cabalは通常それで動作せず、アンインストールコマンドを提供しないため、システムのパッケージマネージャーでパッケージを探してみてください。
Evi1M4chine 14年

13

ANSIエスケープシーケンスを理解する端末(Unix / Linuxシステムではすべての用語を信じます)では、次のように簡単に実行できます。

clear = putStr "\ESC[2J"

2画面全体をクリアします。カーソルから画面の終わりまで、またはカーソルから画面の最初までクリアしたい場合は、0またはを1それぞれ使用できます。

ただし、これはWindowsシェルでは機能しないと思います。



8

UnixシステムでSystem.system "clear"は、コマンドラインユーティリティのclearを呼び出すだけで実行できます。外部ツールに依存しないソリューションの場合、ansi-terminalなどの異なる端末タイプを抽象化するライブラリが必要です。


8
@Pradeep:はい、そして私はhaskellで答えました。
sepp2k 2010年

8
@Pradeep:叫ぶ必要はありません。(en.wikipedia.org/wiki/All_caps#Internetを参照)
Jared Updike

5

Windowsでの簡単な方法は、

import System.Process

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

これは私にとって最もクリーンなソリューションであり、Linuxシステムではを使用していましたsystem "clear
Iain J. Reid

5

Windowsでは、HaskellコマンドプロンプトターミナルにCtrl + Lを使用します。また、GUIの場合はCtrl + Sを使用します。


0

Linux(少なくともUbuntu)では、これがターミナルをクリアするために使用するコードです。

import qualified System.Process as SP

clearScreen :: IO ()
clearScreen = do
  _ <- SP.system "reset"
  return ()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.