diff options
author | Joris | 2022-10-09 17:38:26 +0200 |
---|---|---|
committer | Joris | 2022-10-09 17:38:26 +0200 |
commit | 3c935cc0728f25dab169d2a05dfa153242946c4a (patch) | |
tree | b826abb5bf25be6ec75e04e71b1de2f7469b935f | |
parent | 9a5fe39f8ea1e2a88876c68a797ced28fbfd8457 (diff) |
Abort with C-c
-rw-r--r-- | src/gui/mod.rs | 18 | ||||
-rw-r--r-- | src/gui/question.rs | 12 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 92cd943..3599df8 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -51,13 +51,17 @@ pub fn start(conn: &Connection, term: &mut Term, events: &Events, deck_name: &st match db::pick_random_ready(conn) { Some(card) => { - let difficulty = question::ask(term, events, &title, &card)?; - answers += 1; - db::update( - conn, - &card.question, - &space_repetition::update(card.state, difficulty), - )?; + match question::ask(term, events, &title, &card)? { + question::Response::Aborted => break, + question::Response::Answered { difficulty } => { + answers += 1; + db::update( + conn, + &card.question, + &space_repetition::update(card.state, difficulty), + )?; + } + } } None => { let message = match db::next_ready(conn) { diff --git a/src/gui/question.rs b/src/gui/question.rs index 27759f8..8f9ee19 100644 --- a/src/gui/question.rs +++ b/src/gui/question.rs @@ -25,12 +25,17 @@ enum Answer { Difficulty { difficulty: Difficulty }, } +pub enum Response { + Aborted, + Answered { difficulty: Difficulty }, +} + pub fn ask<B: Backend>( terminal: &mut Terminal<B>, events: &Events, title: &str, card: &Card, -) -> Result<Difficulty> { +) -> Result<Response> { let mut state = State { input: String::new(), answer: Answer::Write, @@ -155,6 +160,9 @@ pub fn ask<B: Backend>( state.input = format!("{}{}", words.join(" "), if words.len() > 0 {" " } else {""}); } } + Key::Ctrl('c') => { + return Ok(Response::Aborted); + } _ => {} }, Answer::Difficulty { @@ -171,7 +179,7 @@ pub fn ask<B: Backend>( state.answer = Answer::Difficulty { difficulty: *d } } } - Key::Char('\n') => return Ok(selected), + Key::Char('\n') => return Ok(Response::Answered { difficulty: selected }), _ => {} }, } |