diff options
Diffstat (limited to 'helix-term/src/ui/picker.rs')
-rw-r--r-- | helix-term/src/ui/picker.rs | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index 853164c5..6ac35fba 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -14,6 +14,7 @@ use std::borrow::Cow; use crate::ui::{Prompt, PromptEvent}; use helix_core::Position; +use helix_view::editor::Action; use helix_view::Editor; pub struct Picker<T> { @@ -28,14 +29,14 @@ pub struct Picker<T> { prompt: Prompt, format_fn: Box<dyn Fn(&T) -> Cow<str>>, - callback_fn: Box<dyn Fn(&mut Editor, &T)>, + callback_fn: Box<dyn Fn(&mut Editor, &T, Action)>, } impl<T> Picker<T> { pub fn new( options: Vec<T>, format_fn: impl Fn(&T) -> Cow<str> + 'static, - callback_fn: impl Fn(&mut Editor, &T) + 'static, + callback_fn: impl Fn(&mut Editor, &T, Action) + 'static, ) -> Self { let prompt = Prompt::new( "".to_string(), @@ -133,13 +134,6 @@ impl<T> Component for Picker<T> { ))); match key_event { - // KeyEvent { - // code: KeyCode::Char(c), - // modifiers: KeyModifiers::NONE, - // } => { - // self.insert_char(c); - // (self.callback_fn)(cx.editor, &self.line, PromptEvent::Update); - // } KeyEvent { code: KeyCode::Up, .. } @@ -165,7 +159,25 @@ impl<T> Component for Picker<T> { .. } => { if let Some(option) = self.selection() { - (self.callback_fn)(&mut cx.editor, option); + (self.callback_fn)(&mut cx.editor, option, Action::Replace); + } + return close_fn; + } + KeyEvent { + code: KeyCode::Char('x'), + modifiers: KeyModifiers::CONTROL, + } => { + if let Some(option) = self.selection() { + (self.callback_fn)(&mut cx.editor, option, Action::VerticalSplit); + } + return close_fn; + } + KeyEvent { + code: KeyCode::Char('v'), + modifiers: KeyModifiers::CONTROL, + } => { + if let Some(option) = self.selection() { + (self.callback_fn)(&mut cx.editor, option, Action::HorizontalSplit); } return close_fn; } |