diff options
author | Blaž Hrastnik | 2020-10-16 05:37:12 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2020-10-16 05:37:12 +0000 |
commit | 49b4cdb5669b1c572b2b26af4353cb16cb1260f7 (patch) | |
tree | 46b8399f87bb9df099e63cb499a6513e5f3e52c8 /helix-term/src | |
parent | 49cc6c19244462b80beeac96be0ea0cc5bc1febc (diff) |
Refactor command calling.
Diffstat (limited to 'helix-term/src')
-rw-r--r-- | helix-term/src/application.rs | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index d4756ef0..51df234a 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -37,7 +37,6 @@ static EX: smol::Executor = smol::Executor::new(); pub struct Application { editor: Editor, prompt: Option<Prompt>, - should_close: bool, terminal: Renderer, } @@ -299,19 +298,18 @@ impl Application { terminal, // TODO; move to state prompt: None, - should_close: false, }; Ok(app) } pub fn set_prompt(&mut self) { - // let commands = |input| match input { - // "q" => self.should_close = true, - // _ => (), - // }; - // let prompt = Prompt::new(|input| None, commands); - // self.prompt = Some(prompt); + let commands = |editor: &mut Editor, input: &str| match input { + "q" => editor.should_close = true, + _ => (), + }; + let prompt = Prompt::new(|input| None, commands); + self.prompt = Some(prompt); } fn render(&mut self) { @@ -341,12 +339,12 @@ impl Application { self.render(); loop { - // Handle key events - if self.should_close { + if self.editor.should_close { break; } - let mut event = reader.next().await; - match event { + + // Handle key events + match reader.next().await { Some(Ok(Event::Resize(width, height))) => { self.terminal.resize(width, height); @@ -359,10 +357,16 @@ impl Application { self.render(); } Some(Ok(Event::Key(event))) => { - // TODO: sequences (`gg`) - // TODO: handle count other than 1 - if let Some(view) = &mut self.editor.view { + // if there's a prompt, it takes priority + if let Some(prompt) = &mut self.prompt { + self.prompt + .as_mut() + .unwrap() + .handle_input(event, &mut self.editor); + } else if let Some(view) = &mut self.editor.view { let keys = vec![event]; + // TODO: sequences (`gg`) + // TODO: handle count other than 1 match view.state.mode() { Mode::Insert => { if let Some(command) = keymap[&Mode::Insert].get(&keys) { @@ -376,9 +380,7 @@ impl Application { } view.ensure_cursor_in_view(); } - Mode::Command => { - self.prompt.as_mut().unwrap().handle_input(event, view); - } + Mode::Command => unreachable!(), mode => { if let Some(command) = keymap[&mode].get(&keys) { command(view, 1); @@ -391,9 +393,7 @@ impl Application { self.render(); } } - Some(Ok(_)) => { - // unhandled event - } + Some(Ok(Event::Mouse(_))) => (), // unhandled Some(Err(x)) => panic!(x), None => break, } |