helix: Stay in helix normal mode after helix delete (#34093)

Joel Courtney created

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

Change summary

crates/vim/src/helix.rs  | 58 +++++++++++++++++++++---------------------
crates/vim/src/normal.rs |  1 
2 files changed, 30 insertions(+), 29 deletions(-)

Detailed changes

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) {

crates/vim/src/normal.rs 🔗

@@ -140,6 +140,7 @@ pub(crate) fn register(editor: &mut Editor, cx: &mut Context<Vim>) {
             })
         });
         vim.visual_delete(false, window, cx);
+        vim.switch_mode(Mode::HelixNormal, true, window, cx);
     });
 
     Vim::action(editor, cx, |vim, _: &ChangeToEndOfLine, window, cx| {