From 8f37c26f350b6409d7e13eb7fee4ef241dd4af5c Mon Sep 17 00:00:00 2001 From: Jan Hrastnik Date: Tue, 20 Oct 2020 23:02:02 +0200 Subject: completion highlighting --- helix-view/src/prompt.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'helix-view/src') diff --git a/helix-view/src/prompt.rs b/helix-view/src/prompt.rs index 12f29942..032bbe54 100644 --- a/helix-view/src/prompt.rs +++ b/helix-view/src/prompt.rs @@ -8,6 +8,7 @@ pub struct Prompt { pub cursor: usize, pub completion: Option>, pub should_close: bool, + pub completion_selection_index: Option, completion_fn: Box Option>>, callback_fn: Box, } @@ -17,13 +18,15 @@ impl Prompt { prompt: String, completion_fn: impl FnMut(&str) -> Option> + 'static, callback_fn: impl FnMut(&mut Editor, &str) + 'static, + command_list: Vec, ) -> Prompt { Prompt { prompt, line: String::new(), cursor: 0, - completion: None, + completion: Some(command_list), should_close: false, + completion_selection_index: None, completion_fn: Box::new(completion_fn), callback_fn: Box::new(callback_fn), } @@ -32,6 +35,7 @@ impl Prompt { pub fn insert_char(&mut self, c: char) { self.line.insert(self.cursor, c); self.cursor += 1; + self.completion = (self.completion_fn)(&self.line); } pub fn move_char_left(&mut self) { @@ -58,6 +62,15 @@ impl Prompt { if self.cursor > 0 { self.line.remove(self.cursor - 1); self.cursor -= 1; + self.completion = (self.completion_fn)(&self.line); + } + } + + pub fn change_completion_selection(&mut self) { + if self.completion_selection_index.is_none() { + self.completion_selection_index = Some(0) + } else { + self.completion_selection_index = Some(self.completion_selection_index.unwrap() + 1) } } @@ -96,9 +109,7 @@ impl Prompt { } => (self.callback_fn)(editor, &self.line), KeyEvent { code: KeyCode::Tab, .. - } => { - self.completion = (self.completion_fn)(&self.line); - } + } => self.change_completion_selection(), _ => (), } } -- cgit v1.2.3-70-g09d2