diff --git a/crates/find/src/find.rs b/crates/find/src/find.rs index 78a04a2126..f5cd80fb8b 100644 --- a/crates/find/src/find.rs +++ b/crates/find/src/find.rs @@ -19,7 +19,7 @@ use std::{ }; use workspace::{ItemViewHandle, Settings, Toolbar, Workspace}; -action!(Deploy); +action!(Deploy, bool); action!(Cancel); action!(ToggleMode, SearchMode); action!(GoToMatch, Direction); @@ -39,7 +39,8 @@ pub enum SearchMode { pub fn init(cx: &mut MutableAppContext) { cx.add_bindings([ - Binding::new("cmd-f", Deploy, Some("Editor && mode == full")), + Binding::new("cmd-f", Deploy(true), Some("Editor && mode == full")), + Binding::new("cmd-e", Deploy(false), Some("Editor && mode == full")), Binding::new("escape", Cancel, Some("FindBar")), Binding::new("enter", GoToMatch(Direction::Next), Some("FindBar")), Binding::new("shift-enter", GoToMatch(Direction::Prev), Some("FindBar")), @@ -74,6 +75,9 @@ impl View for FindBar { } fn on_focus(&mut self, cx: &mut ViewContext) { + self.query_editor.update(cx, |query_editor, cx| { + query_editor.select_all(&editor::SelectAll, cx); + }); cx.focus(&self.query_editor); } @@ -195,7 +199,6 @@ impl FindBar { let len = query_buffer.read(cx).len(); query_buffer.edit([0..len], query, cx); }); - query_editor.select_ranges([0..query.len()], None, cx); }); } @@ -249,7 +252,7 @@ impl FindBar { .boxed() } - fn deploy(workspace: &mut Workspace, _: &Deploy, cx: &mut ViewContext) { + fn deploy(workspace: &mut Workspace, Deploy(focus): &Deploy, cx: &mut ViewContext) { let settings = workspace.settings(); workspace.active_pane().update(cx, |pane, cx| { pane.show_toolbar(cx, |cx| FindBar::new(settings, cx)); @@ -257,8 +260,6 @@ impl FindBar { .active_toolbar() .and_then(|toolbar| toolbar.downcast::()) { - cx.focus(&find_bar); - if let Some(editor) = pane .active_item() .and_then(|editor| editor.act_as::(cx)) @@ -270,7 +271,7 @@ impl FindBar { .read(cx) .newest_selection::(&display_map.buffer_snapshot); - let text: String; + let mut text: String; if selection.start == selection.end { let point = selection.start.to_display_point(&display_map); let range = editor::movement::surrounding_word(&display_map, point); @@ -278,7 +279,7 @@ impl FindBar { ..range.end.to_offset(&display_map, Bias::Right); text = display_map.buffer_snapshot.text_for_range(range).collect(); if text.trim().is_empty() { - return; + text = String::new(); } } else { text = display_map @@ -287,7 +288,13 @@ impl FindBar { .collect(); } - find_bar.update(cx, |find_bar, cx| find_bar.set_query(&text, cx)); + if !text.is_empty() { + find_bar.update(cx, |find_bar, cx| find_bar.set_query(&text, cx)); + } + } + + if *focus { + cx.focus(&find_bar); } } });