Fix some cases of broken repeat in vim

This commit is contained in:
Conrad Irwin 2024-01-18 13:17:52 -07:00
parent 194e0f3231
commit 4e118f3dd7
4 changed files with 29 additions and 4 deletions

View File

@ -1,6 +1,6 @@
use crate::Vim;
use crate::{insert::NormalBefore, Vim};
use editor::{Editor, EditorEvent};
use gpui::{AppContext, Entity, EntityId, View, ViewContext, WindowContext};
use gpui::{Action, AppContext, Entity, EntityId, View, ViewContext, WindowContext};
pub fn init(cx: &mut AppContext) {
cx.observe_new_views(|_, cx: &mut ViewContext<Editor>| {
@ -34,8 +34,7 @@ fn focused(editor: View<Editor>, cx: &mut WindowContext) {
fn blurred(editor: View<Editor>, cx: &mut WindowContext) {
Vim::update(cx, |vim, cx| {
vim.workspace_state.recording = false;
vim.workspace_state.recorded_actions.clear();
vim.stop_recording_immediately(NormalBefore.boxed_clone());
if let Some(previous_editor) = vim.active_editor.clone() {
if previous_editor
.upgrade()

View File

@ -493,4 +493,17 @@ mod test {
cx.simulate_keystrokes(["escape"]);
cx.assert_state("ˇjhello\n", Mode::Normal);
}
#[gpui::test]
async fn test_repeat_over_blur(cx: &mut gpui::TestAppContext) {
let mut cx = NeovimBackedTestContext::new(cx).await;
cx.set_shared_state("ˇhello hello hello\n").await;
cx.simulate_shared_keystrokes(["c", "f", "o", "x", "escape"])
.await;
cx.assert_shared_state("ˇx hello hello\n").await;
cx.simulate_shared_keystrokes([":", "escape"]).await;
cx.simulate_shared_keystrokes(["."]).await;
cx.assert_shared_state("ˇx hello\n").await;
}
}

View File

@ -62,6 +62,8 @@ pub struct NeovimBackedTestContext {
impl NeovimBackedTestContext {
pub async fn new(cx: &mut gpui::TestAppContext) -> NeovimBackedTestContext {
#[cfg(feature = "neovim")]
cx.executor().allow_parking();
// rust stores the name of the test on the current thread.
// We use this to automatically name a file that will store
// the neovim connection's requests/responses so that we can

View File

@ -0,0 +1,11 @@
{"Put":{"state":"ˇhello hello hello\n"}}
{"Key":"c"}
{"Key":"f"}
{"Key":"o"}
{"Key":"x"}
{"Key":"escape"}
{"Get":{"state":"ˇx hello hello\n","mode":"Normal"}}
{"Key":":"}
{"Key":"escape"}
{"Key":"."}
{"Get":{"state":"ˇx hello\n","mode":"Normal"}}