@@ -361,6 +361,14 @@ impl<T: Item + 'static> FilePicker<T> {
361 self.show_preview = !self.show_preview;
361 self.show_preview = !self.show_preview;
364+ fn prompt_handle_event(&mut self, event: &Event, cx: &mut Context) -> EventResult {
365+ if let EventResult::Consumed(_) = self.prompt.handle_event(event, cx) {
366+ // TODO: recalculate only if pattern changed
369+ EventResult::Consumed(None)
364 fn current_file(&self, editor: &Editor) -> Option<FileLocation> {
372 fn current_file(&self, editor: &Editor) -> Option<FileLocation> {
365 self.picker
373 self.picker
366 .selection()
374 .selection()
@@ -603,7 +611,77 @@ impl<T: Item + 'static> FilePicker<T> {
603 return self.handle_idle_timeout(ctx);
611 return self.handle_idle_timeout(ctx);
605 // TODO: keybinds for scrolling preview
613 // TODO: keybinds for scrolling preview
606− self.picker.handle_event(event, ctx)
614+
615+ let key_event = match event {
616+ Event::Key(event) => *event,
617+ Event::Paste(..) => return self.prompt_handle_event(event, ctx),
618+ Event::Resize(..) => return EventResult::Consumed(None),
619+ _ => return EventResult::Ignored(None),
623+ EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor, _ctx| {
625+ compositor.last_picker = compositor.pop();
628+ // So that idle timeout retriggers
629+ ctx.editor.reset_idle_timer();
632+ shift!(Tab) | key!(Up) | ctrl!('p') => {
633+ self.move_by(1, Direction::Backward);
635+ key!(Tab) | key!(Down) | ctrl!('n') => {
636+ self.move_by(1, Direction::Forward);
638+ key!(PageDown) | ctrl!('d') => {
641+ key!(PageUp) | ctrl!('u') => {
650+ key!(Esc) | ctrl!('c') => {
654+ if let Some(option) = self.selection() {
655+ (self.callback_fn)(ctx, option, Action::Load);
659+ if let Some(option) = self.selection() {
660+ (self.callback_fn)(ctx, option, Action::Replace);
665+ if let Some(option) = self.selection() {
666+ (self.callback_fn)(ctx, option, Action::HorizontalSplit);
671+ if let Some(option) = self.selection() {
672+ (self.callback_fn)(ctx, option, Action::VerticalSplit);
677+ self.toggle_preview();
680+ self.prompt_handle_event(event, ctx);
684+ EventResult::Consumed(None)
609 fn cursor(&self, area: Rect, ctx: &Editor) -> (Option<Position>, CursorKind) {
687 fn cursor(&self, area: Rect, ctx: &Editor) -> (Option<Position>, CursorKind) {
@@ -737,11 +815,7 @@ impl<T: Item> Picker<T> {
739 fn prompt_handle_event(&mut self, event: &Event, cx: &mut Context) -> EventResult {
817 fn prompt_handle_event(&mut self, event: &Event, cx: &mut Context) -> EventResult {
740− if let EventResult::Consumed(_) = self.prompt.handle_event(event, cx) {
818+ unimplemented!()
741− // TODO: recalculate only if pattern changed
744− EventResult::Consumed(None)
@@ -757,75 +831,7 @@ impl<T: Item + 'static> Component for Picker<T> {
759 fn handle_event(&mut self, event: &Event, cx: &mut Context) -> EventResult {
833 fn handle_event(&mut self, event: &Event, cx: &mut Context) -> EventResult {
760− let key_event = match event {
834+ unimplemented!()
761− Event::Key(event) => *event,
762− Event::Paste(..) => return self.prompt_handle_event(event, cx),
763− Event::Resize(..) => return EventResult::Consumed(None),
764− _ => return EventResult::Ignored(None),
767− let close_fn = EventResult::Consumed(Some(Box::new(|compositor: &mut Compositor, _cx| {
769− compositor.last_picker = compositor.pop();
772− // So that idle timeout retriggers
773− cx.editor.reset_idle_timer();
776− shift!(Tab) | key!(Up) | ctrl!('p') => {
777− self.move_by(1, Direction::Backward);
779− key!(Tab) | key!(Down) | ctrl!('n') => {
780− self.move_by(1, Direction::Forward);
782− key!(PageDown) | ctrl!('d') => {
785− key!(PageUp) | ctrl!('u') => {
794− key!(Esc) | ctrl!('c') => {
798− if let Some(option) = self.selection() {
799− (self.callback_fn)(cx, option, Action::Load);
803− if let Some(option) = self.selection() {
804− (self.callback_fn)(cx, option, Action::Replace);
809− if let Some(option) = self.selection() {
810− (self.callback_fn)(cx, option, Action::HorizontalSplit);
815− if let Some(option) = self.selection() {
816− (self.callback_fn)(cx, option, Action::VerticalSplit);
821− self.toggle_preview();
824− self.prompt_handle_event(event, cx);
828− EventResult::Consumed(None)
831 fn render(&mut self, area: Rect, surface: &mut Surface, cx: &mut Context) {
837 fn render(&mut self, area: Rect, surface: &mut Surface, cx: &mut Context) {