diff --git a/src/main.rs b/src/main.rs index 94690b6..dc5a3d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,7 +20,7 @@ use std::io::{ stdin, stdout, Read, Stdout, Write }; use crossterm::{ cursor, - event::{Event, KeyCode, KeyEvent} + event::{ Event, KeyCode, KeyEvent, read }, terminal, ExecutableCommand, Result @@ -116,6 +116,7 @@ enum Mode { Normal, Command, Visual, + Append, Insert, } @@ -125,6 +126,7 @@ impl Mode { match self { Mode::Normal => Style::SteadyBlock, Mode::Visual => Style::BlinkingBlock, + Mode::Append => Style::BlinkingBar, Mode::Insert => Style::BlinkingBar, Mode::Command => Style::SteadyUnderScore, } @@ -174,6 +176,7 @@ impl State { Mode::Normal => self.on_normal_event(event), Mode::Command => self.on_command_event(event), Mode::Visual => self.on_visual_event(event), + Mode::Append => self.on_append_event(event), Mode::Insert => self.on_insert_event(event), } } @@ -184,6 +187,10 @@ impl State { KeyCode::Char('i') => { self.mode = Mode::Insert; } + KeyCode::Char('a') => { + self.move_cursor(Direction::Right); + self.mode = Mode::Append; + } KeyCode::Char(':') => { self.mode = Mode::Command; } @@ -223,6 +230,19 @@ impl State { } } + fn on_append_event(&mut self, event: Event) { + match event { + Event::Key(KeyEvent { code, .. }) => match code { + KeyCode::Esc => { + self.move_cursor(Direction::Left); + self.mode = Mode::Normal; + } + _ => self.on_insert_event(event), + }, + _ => {} + } + } + fn on_insert_event(&mut self, event: Event) { match event { Event::Key(KeyEvent { code, .. }) => match code { @@ -274,7 +294,7 @@ impl State { fn screen_main(stdout: &mut Stdout, mut state: State) -> Result<()> { while !state.quit { state.draw(stdout)?; - let event = event::read()?; + let event = read()?; state.on_event(event); }