From 69c23e5f6ee61fca98aa29c64d8bdb2274d2f1f8 Mon Sep 17 00:00:00 2001 From: Koalefant Date: Sat, 12 Aug 2023 23:15:05 +0200 Subject: [PATCH] Goto next/prev in last picker --- helix-term/src/commands.rs | 26 +++++++++++++++++++++++++- helix-term/src/keymap/default.rs | 2 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 61c647d0b..3bc20f622 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -35,7 +35,7 @@ use helix_view::{ document::{FormatterError, Mode, SCRATCH_BUFFER_NAME}, editor::{Action, CompleteAction}, info::Info, - input::KeyEvent, + input::{Event, KeyEvent, KeyModifiers}, keyboard::KeyCode, tree, view::View, @@ -464,6 +464,8 @@ impl MappableCommand { goto_prev_test, "Goto previous test", goto_next_paragraph, "Goto next paragraph", goto_prev_paragraph, "Goto previous paragraph", + goto_next_in_last_picker, "Goto next in last picker", + goto_prev_in_last_picker, "Goto previous in last picker", dap_launch, "Launch debug target", dap_restart, "Restart debugging session", dap_toggle_breakpoint, "Toggle breakpoint", @@ -3249,6 +3251,28 @@ fn goto_prev_diag(cx: &mut Context) { doc.set_selection(view.id, selection); } +fn goto_next_in_last_picker(cx: &mut Context) { + cx.callback = Some(Box::new(|compositor, cx| { + if let Some(picker) = &mut compositor.last_picker { + picker.handle_event( &Event::Key(KeyEvent { code: KeyCode::Down, modifiers: KeyModifiers::NONE }), cx); + picker.handle_event( &Event::Key(KeyEvent { code: KeyCode::Enter, modifiers: KeyModifiers::NONE }), cx); + } else { + cx.editor.set_error("no last picker") + } + })); +} + +fn goto_prev_in_last_picker(cx: &mut Context) { + cx.callback = Some(Box::new(|compositor, cx| { + if let Some(picker) = &mut compositor.last_picker { + picker.handle_event( &Event::Key(KeyEvent { code: KeyCode::Up, modifiers: KeyModifiers::NONE }), cx); + picker.handle_event( &Event::Key(KeyEvent { code: KeyCode::Enter, modifiers: KeyModifiers::NONE }), cx); + } else { + cx.editor.set_error("no last picker") + } + })); +} + fn goto_first_change(cx: &mut Context) { goto_first_change_impl(cx, false); } diff --git a/helix-term/src/keymap/default.rs b/helix-term/src/keymap/default.rs index 763ed4ae7..bedeb2d82 100644 --- a/helix-term/src/keymap/default.rs +++ b/helix-term/src/keymap/default.rs @@ -115,6 +115,7 @@ pub fn default() -> HashMap { "c" => goto_prev_comment, "T" => goto_prev_test, "p" => goto_prev_paragraph, + "[" => goto_prev_in_last_picker, "space" => add_newline_above, }, "]" => { "Right bracket" @@ -128,6 +129,7 @@ pub fn default() -> HashMap { "c" => goto_next_comment, "T" => goto_next_test, "p" => goto_next_paragraph, + "]" => goto_next_in_last_picker, "space" => add_newline_below, },