mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-11-08 09:09:17 +01:00
Show message on reset
This commit is contained in:
parent
25e855a009
commit
bd5503a0d3
11
src/list.rs
11
src/list.rs
@ -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())?;
|
||||
|
@ -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,
|
||||
|
@ -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)?;
|
||||
|
Loading…
Reference in New Issue
Block a user