aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorJan Hrastnik2020-10-12 22:23:48 +0000
committerBlaž Hrastnik2020-10-16 03:00:28 +0000
commited03ec92a825b8e42005f2f8506b0f3db4923fa5 (patch)
treec7e3da955be3e296c4f2f549fc91c1d4d47a1f3b /helix-view
parent7208c86f23ac6d75aff62268cff73089c068cf74 (diff)
moved prompt command matching to prompt.rs
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/commands.rs16
-rw-r--r--helix-view/src/keymap.rs4
-rw-r--r--helix-view/src/prompt.rs20
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),
+ _ => (),
+ }
+ }
}