From ecf4d5539ea1695a7408f5b8d542c0ca02e43315 Mon Sep 17 00:00:00 2001 From: Joel Courtney Date: Tue, 8 Jul 2025 20:34:20 -0700 Subject: [PATCH] helix: Stay in helix normal mode after helix delete (#34093) Currently, the HelixDelete action switches to (vim) Normal mode instead of HelixNormal mode. This adds a line to the helix delete action to stay in helix normal mode. There was already a commented-out test for this. I've uncommented it and it now passes. Release Notes: - helix: Fixed switching to vim NORMAL mode instead of HELIX_NORMAL mode after deletion --- crates/vim/src/helix.rs | 58 ++++++++++++++++++++-------------------- crates/vim/src/normal.rs | 1 + 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/crates/vim/src/helix.rs b/crates/vim/src/helix.rs index e271c06a5e..ec9b959b12 100644 --- a/crates/vim/src/helix.rs +++ b/crates/vim/src/helix.rs @@ -368,40 +368,40 @@ mod test { cx.assert_state("aa\n«ˇ »bb", Mode::HelixNormal); } - // #[gpui::test] - // async fn test_delete(cx: &mut gpui::TestAppContext) { - // let mut cx = VimTestContext::new(cx, true).await; + #[gpui::test] + async fn test_delete(cx: &mut gpui::TestAppContext) { + let mut cx = VimTestContext::new(cx, true).await; - // // test delete a selection - // cx.set_state( - // indoc! {" - // The qu«ick ˇ»brown - // fox jumps over - // the lazy dog."}, - // Mode::HelixNormal, - // ); + // test delete a selection + cx.set_state( + indoc! {" + The qu«ick ˇ»brown + fox jumps over + the lazy dog."}, + Mode::HelixNormal, + ); - // cx.simulate_keystrokes("d"); + cx.simulate_keystrokes("d"); - // cx.assert_state( - // indoc! {" - // The quˇbrown - // fox jumps over - // the lazy dog."}, - // Mode::HelixNormal, - // ); + cx.assert_state( + indoc! {" + The quˇbrown + fox jumps over + the lazy dog."}, + Mode::HelixNormal, + ); - // // test deleting a single character - // cx.simulate_keystrokes("d"); + // test deleting a single character + cx.simulate_keystrokes("d"); - // cx.assert_state( - // indoc! {" - // The quˇrown - // fox jumps over - // the lazy dog."}, - // Mode::HelixNormal, - // ); - // } + cx.assert_state( + indoc! {" + The quˇrown + fox jumps over + the lazy dog."}, + Mode::HelixNormal, + ); + } // #[gpui::test] // async fn test_delete_character_end_of_line(cx: &mut gpui::TestAppContext) { diff --git a/crates/vim/src/normal.rs b/crates/vim/src/normal.rs index baaf6bc3c4..6131032f4f 100644 --- a/crates/vim/src/normal.rs +++ b/crates/vim/src/normal.rs @@ -140,6 +140,7 @@ pub(crate) fn register(editor: &mut Editor, cx: &mut Context) { }) }); vim.visual_delete(false, window, cx); + vim.switch_mode(Mode::HelixNormal, true, window, cx); }); Vim::action(editor, cx, |vim, _: &ChangeToEndOfLine, window, cx| {