From fa55b1e51c2310cf73689da37c5c57441d7e89c3 Mon Sep 17 00:00:00 2001 From: Jan Hrastnik Date: Thu, 15 Oct 2020 12:08:01 +0200 Subject: added closures to prompt --- helix-term/src/editor.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'helix-term/src') diff --git a/helix-term/src/editor.rs b/helix-term/src/editor.rs index 78456654..bdcb9ae0 100644 --- a/helix-term/src/editor.rs +++ b/helix-term/src/editor.rs @@ -36,7 +36,8 @@ pub struct Editor { size: (u16, u16), surface: Surface, cache: Surface, - prompt: Prompt, + prompt: Option, + should_close: bool, } impl Editor { @@ -46,7 +47,6 @@ impl Editor { let mut terminal = Terminal::new(backend)?; let size = terminal::size().unwrap(); let area = Rect::new(0, 0, size.0, size.1); - let prompt = Prompt::new(); let mut editor = Editor { terminal, @@ -55,7 +55,8 @@ impl Editor { surface: Surface::empty(area), cache: Surface::empty(area), // TODO; move to state - prompt, + prompt: None, + should_close: false, }; if let Some(file) = args.values_of_t::("files").unwrap().pop() { @@ -65,6 +66,15 @@ impl Editor { Ok(editor) } + pub fn set_commands(self) { + let commands = |input: &str| match input { + "q" => self.should_close = true, + _ => (), + }; + let prompt = Prompt::new(|input| None, commands); + self.prompt = Some(prompt); + } + pub fn open(&mut self, path: PathBuf) -> Result<(), Error> { self.view = Some(View::open(path, self.size)?); Ok(()) @@ -304,10 +314,14 @@ impl Editor { let mut reader = EventStream::new(); let keymap = keymap::default(); + self.set_commands(); self.render(); loop { // Handle key events + if self.should_close { + break; + } let mut event = reader.next().await; match event { Some(Ok(Event::Resize(width, height))) => { @@ -324,13 +338,6 @@ impl Editor { self.render(); } - Some(Ok(Event::Key(KeyEvent { - code: KeyCode::Char('q'), - .. - }))) => { - break; - } - Some(Ok(Event::Key(event))) => { // TODO: sequences (`gg`) // TODO: handle count other than 1 -- cgit v1.2.3-70-g09d2