mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03: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,
|
ExecutableCommand,
|
||||||
};
|
};
|
||||||
use ratatui::{backend::CrosstermBackend, Terminal};
|
use ratatui::{backend::CrosstermBackend, Terminal};
|
||||||
use std::io;
|
use std::{fmt::Write, io};
|
||||||
|
|
||||||
mod state;
|
mod state;
|
||||||
|
|
||||||
|
@ -42,6 +42,8 @@ pub fn list(state_file: &mut StateFile, exercises: &[Exercise]) -> Result<()> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ui_state.message.clear();
|
||||||
|
|
||||||
match key.code {
|
match key.code {
|
||||||
KeyCode::Char('q') => break,
|
KeyCode::Char('q') => break,
|
||||||
KeyCode::Down | KeyCode::Char('j') => ui_state.select_next(),
|
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::End | KeyCode::Char('G') => ui_state.select_last(),
|
||||||
KeyCode::Char('r') => {
|
KeyCode::Char('r') => {
|
||||||
let selected = ui_state.selected();
|
let selected = ui_state.selected();
|
||||||
exercises[selected].reset()?;
|
let exercise = &exercises[selected];
|
||||||
|
exercise.reset()?;
|
||||||
state_file.reset(selected)?;
|
state_file.reset(selected)?;
|
||||||
|
|
||||||
ui_state.table = ui_state.table.rows(UiState::rows(state_file, exercises));
|
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') => {
|
KeyCode::Char('c') => {
|
||||||
state_file.set_next_exercise_ind(ui_state.selected())?;
|
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 struct UiState<'a> {
|
||||||
pub table: Table<'a>,
|
pub table: Table<'a>,
|
||||||
|
pub message: String,
|
||||||
selected: usize,
|
selected: usize,
|
||||||
table_state: TableState,
|
table_state: TableState,
|
||||||
last_ind: usize,
|
last_ind: usize,
|
||||||
|
@ -77,14 +78,13 @@ impl<'a> UiState<'a> {
|
||||||
.block(Block::default().borders(Borders::BOTTOM));
|
.block(Block::default().borders(Borders::BOTTOM));
|
||||||
|
|
||||||
let selected = 0;
|
let selected = 0;
|
||||||
let table_state = TableState::default().with_selected(Some(selected));
|
|
||||||
let last_ind = exercises.len() - 1;
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
table,
|
table,
|
||||||
selected,
|
selected,
|
||||||
table_state,
|
table_state: TableState::default().with_selected(Some(selected)),
|
||||||
last_ind,
|
last_ind: exercises.len() - 1,
|
||||||
|
message: String::with_capacity(128),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,10 +130,14 @@ impl<'a> UiState<'a> {
|
||||||
&mut self.table_state,
|
&mut self.table_state,
|
||||||
);
|
);
|
||||||
|
|
||||||
let help_footer =
|
let message = if self.message.is_empty() {
|
||||||
"↓/j ↑/k home/g end/G │ Filter <d>one/<p>ending │ <r>eset │ <c>ontinue at │ <q>uit";
|
// 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(
|
frame.render_widget(
|
||||||
Span::raw(help_footer),
|
Span::raw(message),
|
||||||
Rect {
|
Rect {
|
||||||
x: 0,
|
x: 0,
|
||||||
y: area.height - 1,
|
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)?;
|
let (ind, exercise) = find_exercise(&name, &exercises)?;
|
||||||
exercise.reset()?;
|
exercise.reset()?;
|
||||||
state_file.reset(ind)?;
|
state_file.reset(ind)?;
|
||||||
println!("The file {} has been reset!", exercise.path.display());
|
println!("The exercise {exercise} has been reset!");
|
||||||
}
|
}
|
||||||
Some(Subcommands::Hint { name }) => {
|
Some(Subcommands::Hint { name }) => {
|
||||||
let (_, exercise) = find_exercise(&name, &exercises)?;
|
let (_, exercise) = find_exercise(&name, &exercises)?;
|
||||||
|
|
Loading…
Reference in a new issue