diff options
Diffstat (limited to 'helix-view')
-rw-r--r-- | helix-view/src/commands.rs | 16 | ||||
-rw-r--r-- | helix-view/src/keymap.rs | 4 | ||||
-rw-r--r-- | helix-view/src/prompt.rs | 20 |
3 files changed, 35 insertions, 5 deletions
diff --git a/helix-view/src/commands.rs b/helix-view/src/commands.rs index 6efbf98d..888317e7 100644 --- a/helix-view/src/commands.rs +++ b/helix-view/src/commands.rs @@ -307,8 +307,20 @@ pub fn append_mode(view: &mut View, _count: usize) { }) } -pub fn command_mode(view: &mut View, _count: usize) { - view.state.mode = Mode::Command; +pub fn prompt_mode(view: &mut View, _count: usize) { + view.state.mode = Mode::Prompt; +} + +pub fn move_char_left_prompt(prompt: &mut Prompt, _char: char) { + if prompt.cursor_loc > 1 { + prompt.cursor_loc -= 1; + } +} + +pub fn move_char_right_prompt(prompt: &mut Prompt, _char: char) { + if prompt.cursor_loc < prompt.buffer.len() { + prompt.cursor_loc += 1; + } } // TODO: I, A, o and O can share a lot of the primitives. diff --git a/helix-view/src/keymap.rs b/helix-view/src/keymap.rs index 96a37e6b..d6d44779 100644 --- a/helix-view/src/keymap.rs +++ b/helix-view/src/keymap.rs @@ -163,7 +163,7 @@ pub fn default() -> Keymaps { vec![key!('p')] => commands::paste, vec![key!('>')] => commands::indent, vec![key!('<')] => commands::unindent, - vec![key!(':')] => commands::command_mode, + vec![key!(':')] => commands::prompt_mode, vec![Key { code: KeyCode::Esc, modifiers: Modifiers::NONE @@ -209,7 +209,7 @@ pub fn default() -> Keymaps { vec![key!('g')] => commands::move_file_start as Command, vec![key!('e')] => commands::move_file_end as Command, ), - state::Mode::Command => hashmap!( + state::Mode::Prompt => hashmap!( vec![Key { code: KeyCode::Esc, modifiers: Modifiers::NONE diff --git a/helix-view/src/prompt.rs b/helix-view/src/prompt.rs index 4aaf770b..f1920daa 100644 --- a/helix-view/src/prompt.rs +++ b/helix-view/src/prompt.rs @@ -1,13 +1,18 @@ +use crate::commands; +use crate::View; +use crossterm::event::{KeyCode, KeyEvent}; use std::string::String; pub struct Prompt { pub buffer: String, + pub cursor_loc: usize, } impl Prompt { pub fn new() -> Prompt { let prompt = Prompt { - buffer: String::from(""), + buffer: String::from(":"), // starting prompt symbol + cursor_loc: 0, }; prompt } @@ -15,4 +20,17 @@ impl Prompt { pub fn insert_char(&mut self, c: char) { self.buffer.push(c); } + + pub fn handle_keyevent(&mut self, key_event: KeyEvent, view: &mut View) { + match key_event { + KeyEvent { + code: KeyCode::Char(c), + .. + } => self.insert_char(c), + KeyEvent { + code: KeyCode::Esc, .. + } => commands::normal_mode(view, 1), + _ => (), + } + } } |