mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-27 23:59:52 +03:00
Fix enter in search (#2768)
Fixes a regression in non-vim search caused by my changes to vim search. Release Notes: - N/A
This commit is contained in:
commit
57b6e25278
@ -426,7 +426,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"context": "BufferSearchBar",
|
"context": "BufferSearchBar > VimEnabled",
|
||||||
"bindings": {
|
"bindings": {
|
||||||
"enter": "vim::SearchSubmit",
|
"enter": "vim::SearchSubmit",
|
||||||
"escape": "buffer_search::Dismiss"
|
"escape": "buffer_search::Dismiss"
|
||||||
|
@ -13,7 +13,7 @@ fn focused(EditorFocused(editor): &EditorFocused, cx: &mut AppContext) {
|
|||||||
cx.update_window(previously_active_editor.window_id(), |cx| {
|
cx.update_window(previously_active_editor.window_id(), |cx| {
|
||||||
Vim::update(cx, |vim, cx| {
|
Vim::update(cx, |vim, cx| {
|
||||||
vim.update_active_editor(cx, |previously_active_editor, cx| {
|
vim.update_active_editor(cx, |previously_active_editor, cx| {
|
||||||
Vim::unhook_vim_settings(previously_active_editor, cx);
|
vim.unhook_vim_settings(previously_active_editor, cx)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -35,7 +35,7 @@ fn blurred(EditorBlurred(editor): &EditorBlurred, cx: &mut AppContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editor.update(cx, |editor, cx| Vim::unhook_vim_settings(editor, cx))
|
editor.update(cx, |editor, cx| vim.unhook_vim_settings(editor, cx))
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -282,4 +282,19 @@ mod test {
|
|||||||
cx.simulate_keystrokes(["enter"]);
|
cx.simulate_keystrokes(["enter"]);
|
||||||
cx.assert_state("aa\nˇbb\ndd\ncc\nbb\n", Mode::Normal);
|
cx.assert_state("aa\nˇbb\ndd\ncc\nbb\n", Mode::Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_non_vim_search(
|
||||||
|
cx: &mut gpui::TestAppContext,
|
||||||
|
deterministic: Arc<gpui::executor::Deterministic>,
|
||||||
|
) {
|
||||||
|
let mut cx = VimTestContext::new(cx, false).await;
|
||||||
|
cx.set_state("ˇone one one one", Mode::Normal);
|
||||||
|
cx.simulate_keystrokes(["cmd-f"]);
|
||||||
|
deterministic.run_until_parked();
|
||||||
|
|
||||||
|
cx.assert_editor_state("«oneˇ» one one one");
|
||||||
|
cx.simulate_keystrokes(["enter"]);
|
||||||
|
cx.assert_editor_state("one «oneˇ» one one");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,7 @@ impl VimState {
|
|||||||
|
|
||||||
pub fn keymap_context_layer(&self) -> KeymapContext {
|
pub fn keymap_context_layer(&self) -> KeymapContext {
|
||||||
let mut context = KeymapContext::default();
|
let mut context = KeymapContext::default();
|
||||||
|
context.add_identifier("VimEnabled");
|
||||||
context.add_key(
|
context.add_key(
|
||||||
"vim_mode",
|
"vim_mode",
|
||||||
match self.mode {
|
match self.mode {
|
||||||
|
@ -14,8 +14,8 @@ use anyhow::Result;
|
|||||||
use collections::CommandPaletteFilter;
|
use collections::CommandPaletteFilter;
|
||||||
use editor::{Bias, Editor, EditorMode, Event};
|
use editor::{Bias, Editor, EditorMode, Event};
|
||||||
use gpui::{
|
use gpui::{
|
||||||
actions, impl_actions, AppContext, Subscription, ViewContext, ViewHandle, WeakViewHandle,
|
actions, impl_actions, keymap_matcher::KeymapContext, AppContext, Subscription, ViewContext,
|
||||||
WindowContext,
|
ViewHandle, WeakViewHandle, WindowContext,
|
||||||
};
|
};
|
||||||
use language::CursorShape;
|
use language::CursorShape;
|
||||||
use motion::Motion;
|
use motion::Motion;
|
||||||
@ -304,17 +304,28 @@ impl Vim {
|
|||||||
// Note: set_collapse_matches is not in unhook_vim_settings, as that method is called on blur,
|
// Note: set_collapse_matches is not in unhook_vim_settings, as that method is called on blur,
|
||||||
// but we need collapse_matches to persist when the search bar is focused.
|
// but we need collapse_matches to persist when the search bar is focused.
|
||||||
editor.set_collapse_matches(false);
|
editor.set_collapse_matches(false);
|
||||||
Self::unhook_vim_settings(editor, cx);
|
self.unhook_vim_settings(editor, cx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unhook_vim_settings(editor: &mut Editor, cx: &mut ViewContext<Editor>) {
|
fn unhook_vim_settings(&self, editor: &mut Editor, cx: &mut ViewContext<Editor>) {
|
||||||
editor.set_cursor_shape(CursorShape::Bar, cx);
|
editor.set_cursor_shape(CursorShape::Bar, cx);
|
||||||
editor.set_clip_at_line_ends(false, cx);
|
editor.set_clip_at_line_ends(false, cx);
|
||||||
editor.set_input_enabled(true);
|
editor.set_input_enabled(true);
|
||||||
editor.selections.line_mode = false;
|
editor.selections.line_mode = false;
|
||||||
editor.remove_keymap_context_layer::<Self>(cx);
|
|
||||||
|
// we set the VimEnabled context on all editors so that we
|
||||||
|
// can distinguish between vim mode and non-vim mode in the BufferSearchBar.
|
||||||
|
// This is a bit of a hack, but currently the search crate does not depend on vim,
|
||||||
|
// and it seems nice to keep it that way.
|
||||||
|
if self.enabled {
|
||||||
|
let mut context = KeymapContext::default();
|
||||||
|
context.add_identifier("VimEnabled");
|
||||||
|
editor.set_keymap_context_layer::<Self>(context, cx)
|
||||||
|
} else {
|
||||||
|
editor.remove_keymap_context_layer::<Self>(cx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user