mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Fix some cases of broken repeat in vim
This commit is contained in:
parent
194e0f3231
commit
4e118f3dd7
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
11
crates/vim/test_data/test_repeat_over_blur.json
Normal file
11
crates/vim/test_data/test_repeat_over_blur.json
Normal 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"}}
|
Loading…
Reference in New Issue
Block a user