project_replace: Fix up key bindings (#3034)

Release Notes:
- N/A
This commit is contained in:
Piotr Osiewicz 2023-09-26 18:40:41 +02:00 committed by GitHub
parent 342a00b89e
commit 36f022bb58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 4 deletions

View file

@ -262,6 +262,13 @@
"down": "search::NextHistoryQuery"
}
},
{
"context": "ProjectSearchBar && in_replace",
"bindings": {
"enter": "search::ReplaceNext",
"cmd-enter": "search::ReplaceAll"
}
},
{
"context": "ProjectSearchView",
"bindings": {
@ -563,7 +570,7 @@
}
},
{
"context": "ProjectSearchBar",
"context": "ProjectSearchBar && !in_replace",
"bindings": {
"cmd-enter": "project_search::SearchInNew"
}

View file

@ -60,7 +60,7 @@ pub fn init(cx: &mut AppContext) {
cx.set_global(ActiveSettings::default());
cx.add_action(ProjectSearchView::deploy);
cx.add_action(ProjectSearchView::move_focus_to_results);
cx.add_action(ProjectSearchBar::search);
cx.add_action(ProjectSearchBar::confirm);
cx.add_action(ProjectSearchBar::search_in_new);
cx.add_action(ProjectSearchBar::select_next_match);
cx.add_action(ProjectSearchBar::select_prev_match);
@ -1371,9 +1371,18 @@ impl ProjectSearchBar {
})
}
}
fn search(&mut self, _: &Confirm, cx: &mut ViewContext<Self>) {
fn confirm(&mut self, _: &Confirm, cx: &mut ViewContext<Self>) {
let mut should_propagate = true;
if let Some(search_view) = self.active_project_search.as_ref() {
search_view.update(cx, |search_view, cx| search_view.search(cx));
search_view.update(cx, |search_view, cx| {
if !search_view.replacement_editor.is_focused(cx) {
should_propagate = false;
search_view.search(cx);
}
});
}
if should_propagate {
cx.propagate_action();
}
}
@ -1678,6 +1687,28 @@ impl View for ProjectSearchBar {
"ProjectSearchBar"
}
fn update_keymap_context(
&self,
keymap: &mut gpui::keymap_matcher::KeymapContext,
cx: &AppContext,
) {
Self::reset_to_default_keymap_context(keymap);
let in_replace = self
.active_project_search
.as_ref()
.map(|search| {
search
.read(cx)
.replacement_editor
.read_with(cx, |_, cx| cx.is_self_focused())
})
.flatten()
.unwrap_or(false);
if in_replace {
keymap.add_identifier("in_replace");
}
}
fn render(&mut self, cx: &mut ViewContext<Self>) -> AnyElement<Self> {
if let Some(_search) = self.active_project_search.as_ref() {
let search = _search.read(cx);