Fix clearing the terminal

This commit is contained in:
mo8it 2024-04-30 01:41:08 +02:00
parent fef66b80ad
commit 52c0f5b39e
3 changed files with 13 additions and 16 deletions

View file

@ -1,9 +1,5 @@
use anyhow::{bail, Context, Result}; use anyhow::{bail, Context, Result};
use crossterm::{ use crossterm::style::Stylize;
style::Stylize,
terminal::{Clear, ClearType},
ExecutableCommand,
};
use serde::Deserialize; use serde::Deserialize;
use std::{ use std::{
fs::{self, File}, fs::{self, File},
@ -13,6 +9,7 @@ use std::{
}; };
use crate::{ use crate::{
clear_terminal,
embedded::EMBEDDED_FILES, embedded::EMBEDDED_FILES,
exercise::{Exercise, OUTPUT_CAPACITY}, exercise::{Exercise, OUTPUT_CAPACITY},
info_file::ExerciseInfo, info_file::ExerciseInfo,
@ -387,7 +384,7 @@ impl AppState {
writeln!(writer, "{}", "ok".green())?; writeln!(writer, "{}", "ok".green())?;
} }
writer.execute(Clear(ClearType::All))?; clear_terminal(writer)?;
writer.write_all(FENISH_LINE.as_bytes())?; writer.write_all(FENISH_LINE.as_bytes())?;
let final_message = self.final_message.trim(); let final_message = self.final_message.trim();

View file

@ -1,12 +1,8 @@
use anyhow::{bail, Context, Result}; use anyhow::{bail, Context, Result};
use app_state::StateFileStatus; use app_state::StateFileStatus;
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use crossterm::{
terminal::{Clear, ClearType},
ExecutableCommand,
};
use std::{ use std::{
io::{self, BufRead, Write}, io::{self, BufRead, StdoutLock, Write},
path::Path, path::Path,
process::exit, process::exit,
}; };
@ -45,6 +41,10 @@ fn in_official_repo() -> bool {
Path::new("dev/rustlings-repo.txt").exists() 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 /// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
#[derive(Parser)] #[derive(Parser)]
#[command(version)] #[command(version)]
@ -129,7 +129,7 @@ fn main() -> Result<()> {
match state_file_status { match state_file_status {
StateFileStatus::NotRead => { StateFileStatus::NotRead => {
let mut stdout = io::stdout().lock(); let mut stdout = io::stdout().lock();
stdout.execute(Clear(ClearType::All))?; clear_terminal(&mut stdout)?;
let welcome_message = welcome_message.trim(); let welcome_message = welcome_message.trim();
write!(stdout, "{welcome_message}\n\nPress ENTER to continue ")?; 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())?; io::stdin().lock().read_until(b'\n', &mut Vec::new())?;
stdout.execute(Clear(ClearType::All))?; clear_terminal(&mut stdout)?;
} }
StateFileStatus::Read => (), StateFileStatus::Read => (),
} }

View file

@ -1,13 +1,13 @@
use anyhow::Result; use anyhow::Result;
use crossterm::{ use crossterm::{
style::{style, Stylize}, style::{style, Stylize},
terminal::{size, Clear, ClearType}, terminal::size,
ExecutableCommand,
}; };
use std::io::{self, StdoutLock, Write}; use std::io::{self, StdoutLock, Write};
use crate::{ use crate::{
app_state::{AppState, ExercisesProgress}, app_state::{AppState, ExercisesProgress},
clear_terminal,
exercise::OUTPUT_CAPACITY, exercise::OUTPUT_CAPACITY,
progress_bar::progress_bar, progress_bar::progress_bar,
terminal_link::TerminalFileLink, terminal_link::TerminalFileLink,
@ -111,7 +111,7 @@ impl<'a> WatchState<'a> {
// Prevent having the first line shifted. // Prevent having the first line shifted.
self.writer.write_all(b"\n")?; 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(&self.output)?;
self.writer.write_all(b"\n")?; self.writer.write_all(b"\n")?;