@@ -36,7 +36,8 @@ pub struct Editor {
36 size: (u16, u16),
36 size: (u16, u16),
37 surface: Surface,
37 surface: Surface,
38 cache: Surface,
38 cache: Surface,
39− prompt: Prompt,
39+ prompt: Option<Prompt>,
42impl Editor {
43impl Editor {
@@ -46,7 +47,6 @@ impl Editor {
46 let mut terminal = Terminal::new(backend)?;
47 let mut terminal = Terminal::new(backend)?;
47 let size = terminal::size().unwrap();
48 let size = terminal::size().unwrap();
48 let area = Rect::new(0, 0, size.0, size.1);
49 let area = Rect::new(0, 0, size.0, size.1);
49− let prompt = Prompt::new();
51 let mut editor = Editor {
51 let mut editor = Editor {
@@ -55,7 +55,8 @@ impl Editor {
55 surface: Surface::empty(area),
55 surface: Surface::empty(area),
56 cache: Surface::empty(area),
56 cache: Surface::empty(area),
57 // TODO; move to state
57 // TODO; move to state
58− prompt,
58+ prompt: None,
61 if let Some(file) = args.values_of_t::<PathBuf>("files").unwrap().pop() {
62 if let Some(file) = args.values_of_t::<PathBuf>("files").unwrap().pop() {
@@ -65,6 +66,15 @@ impl Editor {
65 Ok(editor)
66 Ok(editor)
69+ pub fn set_commands(self) {
70+ let commands = |input: &str| match input {
71+ "q" => self.should_close = true,
74+ let prompt = Prompt::new(|input| None, commands);
75+ self.prompt = Some(prompt);
68 pub fn open(&mut self, path: PathBuf) -> Result<(), Error> {
78 pub fn open(&mut self, path: PathBuf) -> Result<(), Error> {
69 self.view = Some(View::open(path, self.size)?);
79 self.view = Some(View::open(path, self.size)?);
@@ -304,10 +314,14 @@ impl Editor {
304 let mut reader = EventStream::new();
314 let mut reader = EventStream::new();
305 let keymap = keymap::default();
315 let keymap = keymap::default();
317+ self.set_commands();
307 self.render();
318 self.render();
310 // Handle key events
321 // Handle key events
322+ if self.should_close {
311 let mut event = reader.next().await;
325 let mut event = reader.next().await;
312 match event {
326 match event {
313 Some(Ok(Event::Resize(width, height))) => {
327 Some(Ok(Event::Resize(width, height))) => {
@@ -324,13 +338,6 @@ impl Editor {
325 self.render();
339 self.render();
327− Some(Ok(Event::Key(KeyEvent {
328− code: KeyCode::Char('q'),
334 Some(Ok(Event::Key(event))) => {
341 Some(Ok(Event::Key(event))) => {
335 // TODO: sequences (`gg`)
342 // TODO: sequences (`gg`)
336 // TODO: handle count other than 1
343 // TODO: handle count other than 1