1use clearscreen::ClearScreen;
2use std::{env, thread::sleep, time::Duration};
3use thiserror::Error;
4
5fn main() -> Result<(), Error> {
6 if let Some(variant) = env::args().nth(1) {
7 let cs = match variant.as_str() {
8 "auto" => ClearScreen::default(),
9 "Terminfo" => ClearScreen::Terminfo,
10 "TerminfoScreen" => ClearScreen::TerminfoScreen,
11 "TerminfoScrollback" => ClearScreen::TerminfoScrollback,
12 "TerminfoReset" => ClearScreen::TerminfoReset,
13 "XtermClear" => ClearScreen::XtermClear,
14 "XtermReset" => ClearScreen::XtermReset,
15 "TputClear" => ClearScreen::TputClear,
16 "TputReset" => ClearScreen::TputReset,
17 "Cls" => ClearScreen::Cls,
18 "WindowsVt" => ClearScreen::WindowsVt,
19 "WindowsVtClear" => ClearScreen::WindowsVtClear,
20 #[cfg(feature = "windows-console")]
21 "WindowsConsoleClear" => ClearScreen::WindowsConsoleClear,
22 #[cfg(feature = "windows-console")]
23 "WindowsConsoleBlank" => ClearScreen::WindowsConsoleBlank,
24 "WindowsCooked" => ClearScreen::WindowsCooked,
25 "VtRis" => ClearScreen::VtRis,
26 "VtLeaveAlt" => ClearScreen::VtLeaveAlt,
27 "VtCooked" => ClearScreen::VtCooked,
28 "VtWellDone" => ClearScreen::VtWellDone,
29 _ => return Err(Error::UnknownVariant(variant)),
30 };
31
32 println!("variant = {:?}, sleeping 1 second", cs);
33 sleep(Duration::from_secs(1));
34 cs.clear()?;
35
36 Ok(())
37 } else {
38 println!("Usage: cargo run --example clscli -- <variant>\nWhere <variant> is one of the ClearScreen enum variants, same casing, or 'auto'.\nI recommend piping into `hexdump -C` to see what’s happening.");
39 Ok(())
40 }
41}
42
43#[derive(Debug, Error)]
44enum Error {
45 #[error("unknown variant: {0}")]
46 UnknownVariant(String),
47
48 #[error(transparent)]
49 ClearScreen(#[from] clearscreen::Error),
50}