1
0
mirror of https://github.com/rust-lang/rustlings.git synced 2024-09-16 10:51:42 +02:00

Show message on reset

This commit is contained in:
mo8it 2024-04-08 01:33:11 +02:00
parent 25e855a009
commit bd5503a0d3
3 changed files with 21 additions and 10 deletions

View File

@ -5,7 +5,7 @@ use crossterm::{
ExecutableCommand,
};
use ratatui::{backend::CrosstermBackend, Terminal};
use std::io;
use std::{fmt::Write, io};
mod state;
@ -42,6 +42,8 @@ pub fn list(state_file: &mut StateFile, exercises: &[Exercise]) -> Result<()> {
}
};
ui_state.message.clear();
match key.code {
KeyCode::Char('q') => break,
KeyCode::Down | KeyCode::Char('j') => ui_state.select_next(),
@ -50,9 +52,14 @@ pub fn list(state_file: &mut StateFile, exercises: &[Exercise]) -> Result<()> {
KeyCode::End | KeyCode::Char('G') => ui_state.select_last(),
KeyCode::Char('r') => {
let selected = ui_state.selected();
exercises[selected].reset()?;
let exercise = &exercises[selected];
exercise.reset()?;
state_file.reset(selected)?;
ui_state.table = ui_state.table.rows(UiState::rows(state_file, exercises));
ui_state
.message
.write_fmt(format_args!("The exercise {exercise} has been reset!"))?;
}
KeyCode::Char('c') => {
state_file.set_next_exercise_ind(ui_state.selected())?;

View File

@ -10,6 +10,7 @@ use crate::{exercise::Exercise, state_file::StateFile};
pub struct UiState<'a> {
pub table: Table<'a>,
pub message: String,
selected: usize,
table_state: TableState,
last_ind: usize,
@ -77,14 +78,13 @@ impl<'a> UiState<'a> {
.block(Block::default().borders(Borders::BOTTOM));
let selected = 0;
let table_state = TableState::default().with_selected(Some(selected));
let last_ind = exercises.len() - 1;
Self {
table,
selected,
table_state,
last_ind,
table_state: TableState::default().with_selected(Some(selected)),
last_ind: exercises.len() - 1,
message: String::with_capacity(128),
}
}
@ -130,10 +130,14 @@ impl<'a> UiState<'a> {
&mut self.table_state,
);
let help_footer =
"↓/j ↑/k home/g end/G │ Filter <d>one/<p>ending │ <r>eset │ <c>ontinue at │ <q>uit";
let message = if self.message.is_empty() {
// Help footer.
"↓/j ↑/k home/g end/G │ Filter <d>one/<p>ending │ <r>eset │ <c>ontinue at │ <q>uit"
} else {
&self.message
};
frame.render_widget(
Span::raw(help_footer),
Span::raw(message),
Rect {
x: 0,
y: area.height - 1,

View File

@ -124,7 +124,7 @@ If you are just starting with Rustlings, run the command `rustlings init` to ini
let (ind, exercise) = find_exercise(&name, &exercises)?;
exercise.reset()?;
state_file.reset(ind)?;
println!("The file {} has been reset!", exercise.path.display());
println!("The exercise {exercise} has been reset!");
}
Some(Subcommands::Hint { name }) => {
let (_, exercise) = find_exercise(&name, &exercises)?;