ฉันจะล้างหน้าจอเทอร์มินัลใน Haskell ได้อย่างไร


93

ฉันจะล้างหน้าจอเทอร์มินัลหลังจากที่ผู้ใช้ของฉันเลือกตัวเลือกจากเมนูแอปพลิเคชันของฉันได้อย่างไร


2
คุณสามารถเข้าใจได้ชัดเจนขึ้นเกี่ยวกับระบบส่วนต่อประสานผู้ใช้ที่คุณใช้ในโปรแกรม Haskell ของคุณหรือไม่? คุณหมายความว่าคุณกำลังอ่านและเขียนข้อความถึง stdin / stdout หรือไม่? ถ้าเป็นเช่นนั้นสิ่งเหล่านี้ไม่มีแนวคิดเกี่ยวกับ "หน้าจอ" โดยปริยาย หากคุณตั้งใจให้โปรแกรมของคุณทำงานโดยสมมติว่ามีเทอร์มินัลต่ออยู่กับ stdin / stdout คุณควรเข้ารหัสโปรแกรมของคุณเพื่อใช้แพ็คเกจควบคุมเทอร์มินัลบางอย่างเช่นคำตอบของ @ZackS ที่ระบุ
MtnViewMark

2
กรุณาเลือกคำตอบที่ถูกต้อง คนต้องผ่านทุกคำตอบ!
Shishir Gupta

คำตอบ:


198

:! รันคำสั่งเชลล์
:! CLS ภายใต้หน้าต่าง
! ชัดเจน ภายใต้ linux และ OS X


2
มีสูตรโกงสำหรับ ghci หรือไม่?
tugberk

2
@ ปีเตอร์การเดาที่ดีที่สุดของฉันเป็นเพราะพวกเขาไม่คิดว่ามันเป็นวิธีแก้ปัญหาแบบ haskell (อย่างถูกต้องมันใช้ได้เฉพาะใน GHCi) มันไม่ได้ผลสำหรับพวกเขา (ขึ้นอยู่กับเชลล์) หรือพวกเขาคิดว่าคำตอบของ ZachS เป็นคำตอบที่ดีกว่า . :! clsเพียงพอสำหรับกรณีการใช้งานของฉัน แต่ใช้ไม่ได้กับกรณีของผู้ถามเนื่องจากผู้ถามไม่ได้ใช้ GHCi
John Dvorak

58

นี่คือสิ่งที่คุณอาจกำลังมองหา:

ansi-terminal:รองรับเทอร์มินัล ANSI อย่างง่ายพร้อมความเข้ากันได้ของ Windows

คุณสามารถค้นหาได้ใน Hackage cabal install ansi-terminalและติดตั้งโดยใช้ มีฟังก์ชั่นเฉพาะสำหรับการล้างหน้าจอการแสดงสีการเลื่อนเคอร์เซอร์ ฯลฯ

การใช้เพื่อล้างหน้าจอทำได้ง่าย: (ใช้กับ GHCI)

import System.Console.ANSI

clearScreen


4
นี่คือคำตอบที่ถูกต้อง พยายามมองหาแพ็คเกจในตัวจัดการแพ็คเกจของระบบของคุณเนื่องจากโดยทั่วไป cabal ไม่ทำงานกับสิ่งนั้นและไม่มีคำสั่งถอนการติดตั้ง
Evi1M4chine

14

บนเทอร์มินัลที่เข้าใจลำดับการหลีกเลี่ยง ANSI (ฉันเชื่อว่าทุกคำในระบบ Unix / Linux) คุณสามารถทำได้ง่ายๆด้วย:

clear = putStr "\ESC[2J"

2ล้างหน้าจอทั้งหมด คุณสามารถใช้0หรือ1ตามลำดับหากคุณต้องการล้างจากเคอร์เซอร์ไปที่ท้ายหน้าจอหรือจากเคอร์เซอร์ไปที่จุดเริ่มต้นของหน้าจอ

อย่างไรก็ตามฉันไม่คิดว่าสิ่งนี้ใช้ได้กับ Windows shell



8

ในระบบ Unix คุณสามารถทำได้System.system "clear"โดยเรียกใช้ยูทิลิตี้บรรทัดคำสั่งที่ชัดเจน สำหรับการแก้ปัญหาที่ไม่ได้ขึ้นอยู่กับเครื่องมือภายนอกคุณจะต้องห้องสมุดที่แตกต่างกันมากกว่าบทคัดย่อขั้วประเภทอย่างเช่นANSI ขั้ว


8
@ Pradeep: ครับผมตอบใน haskell
sepp2k

8
@Pradeep: ไม่ต้องตะโกน (ดูen.wikipedia.org/wiki/All_caps#Internet )
Jared Updike

5

วิธีที่รวดเร็วใน Windows คือ

import System.Process

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

system "clearนี่เป็นวิธีการแก้ปัญหาที่สะอาดสำหรับผมและสำหรับลินุกซ์ใช้ระบบ
Iain J. Reid

5

บน Windows ให้ใช้Ctrl + Lสำหรับเทอร์มินัลพร้อมรับคำสั่ง Haskell และสำหรับ 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.