summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-30 01:41:08 +0200
committermo8it <mo8it@proton.me>2024-04-30 01:41:08 +0200
commit52c0f5b39efd7c71e63a3a680a1d91f3efc8eda5 (patch)
treeef6ab11cbf11aa2cebb4b43e73d59f93ec3d241d /src
parentfef66b80ad0b90d7bbc6ebe704f34816a4b3173a (diff)
Fix clearing the terminal
Diffstat (limited to 'src')
-rw-r--r--src/app_state.rs9
-rw-r--r--src/main.rs14
-rw-r--r--src/watch/state.rs6
3 files changed, 13 insertions, 16 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index 6af1043..907c128 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -1,9 +1,5 @@
use anyhow::{bail, Context, Result};
-use crossterm::{
- style::Stylize,
- terminal::{Clear, ClearType},
- ExecutableCommand,
-};
+use crossterm::style::Stylize;
use serde::Deserialize;
use std::{
fs::{self, File},
@@ -13,6 +9,7 @@ use std::{
};
use crate::{
+ clear_terminal,
embedded::EMBEDDED_FILES,
exercise::{Exercise, OUTPUT_CAPACITY},
info_file::ExerciseInfo,
@@ -387,7 +384,7 @@ impl AppState {
writeln!(writer, "{}", "ok".green())?;
}
- writer.execute(Clear(ClearType::All))?;
+ clear_terminal(writer)?;
writer.write_all(FENISH_LINE.as_bytes())?;
let final_message = self.final_message.trim();
diff --git a/src/main.rs b/src/main.rs
index c51f63c..3e37ce2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,12 +1,8 @@
use anyhow::{bail, Context, Result};
use app_state::StateFileStatus;
use clap::{Parser, Subcommand};
-use crossterm::{
- terminal::{Clear, ClearType},
- ExecutableCommand,
-};
use std::{
- io::{self, BufRead, Write},
+ io::{self, BufRead, StdoutLock, Write},
path::Path,
process::exit,
};
@@ -45,6 +41,10 @@ fn in_official_repo() -> bool {
Path::new("dev/rustlings-repo.txt").exists()
}
+fn clear_terminal(stdout: &mut StdoutLock) -> io::Result<()> {
+ stdout.write_all(b"\x1b[H\x1b[2J\x1b[3J")
+}
+
/// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
#[derive(Parser)]
#[command(version)]
@@ -129,7 +129,7 @@ fn main() -> Result<()> {
match state_file_status {
StateFileStatus::NotRead => {
let mut stdout = io::stdout().lock();
- stdout.execute(Clear(ClearType::All))?;
+ clear_terminal(&mut stdout)?;
let welcome_message = welcome_message.trim();
write!(stdout, "{welcome_message}\n\nPress ENTER to continue ")?;
@@ -137,7 +137,7 @@ fn main() -> Result<()> {
io::stdin().lock().read_until(b'\n', &mut Vec::new())?;
- stdout.execute(Clear(ClearType::All))?;
+ clear_terminal(&mut stdout)?;
}
StateFileStatus::Read => (),
}
diff --git a/src/watch/state.rs b/src/watch/state.rs
index e5364c3..2cf7521 100644
--- a/src/watch/state.rs
+++ b/src/watch/state.rs
@@ -1,13 +1,13 @@
use anyhow::Result;
use crossterm::{
style::{style, Stylize},
- terminal::{size, Clear, ClearType},
- ExecutableCommand,
+ terminal::size,
};
use std::io::{self, StdoutLock, Write};
use crate::{
app_state::{AppState, ExercisesProgress},
+ clear_terminal,
exercise::OUTPUT_CAPACITY,
progress_bar::progress_bar,
terminal_link::TerminalFileLink,
@@ -111,7 +111,7 @@ impl<'a> WatchState<'a> {
// Prevent having the first line shifted.
self.writer.write_all(b"\n")?;
- self.writer.execute(Clear(ClearType::All))?;
+ clear_terminal(&mut self.writer)?;
self.writer.write_all(&self.output)?;
self.writer.write_all(b"\n")?;