Detailed changes
@@ -49,7 +49,9 @@
"ctrl-k ctrl-l": "editor::ConvertToLowerCase",
"shift-alt-m": "markdown::OpenPreviewToTheSide",
"ctrl-backspace": "editor::DeleteToPreviousWordStart",
- "ctrl-delete": "editor::DeleteToNextWordEnd"
+ "ctrl-delete": "editor::DeleteToNextWordEnd",
+ "f3": "editor::FindNextMatch",
+ "shift-f3": "editor::FindPreviousMatch"
}
},
{
@@ -51,7 +51,9 @@
"cmd-shift-j": "editor::JoinLines",
"shift-alt-m": "markdown::OpenPreviewToTheSide",
"ctrl-backspace": "editor::DeleteToPreviousWordStart",
- "ctrl-delete": "editor::DeleteToNextWordEnd"
+ "ctrl-delete": "editor::DeleteToNextWordEnd",
+ "cmd-g": "editor::FindNextMatch",
+ "cmd-shift-g": "editor::FindPreviousMatch"
}
},
{
@@ -283,6 +283,8 @@ actions!(
DuplicateSelection,
ExpandMacroRecursively,
FindAllReferences,
+ FindNextMatch,
+ FindPreviousMatch,
Fold,
FoldAll,
FoldFunctionBodies,
@@ -12020,6 +12020,54 @@ impl Editor {
Ok(())
}
+ pub fn find_next_match(
+ &mut self,
+ _: &FindNextMatch,
+ window: &mut Window,
+ cx: &mut Context<Self>,
+ ) -> Result<()> {
+ let selections = self.selections.disjoint_anchors();
+ match selections.first() {
+ Some(first) if selections.len() >= 2 => {
+ self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
+ s.select_ranges([first.range()]);
+ });
+ }
+ _ => self.select_next(
+ &SelectNext {
+ replace_newest: true,
+ },
+ window,
+ cx,
+ )?,
+ }
+ Ok(())
+ }
+
+ pub fn find_previous_match(
+ &mut self,
+ _: &FindPreviousMatch,
+ window: &mut Window,
+ cx: &mut Context<Self>,
+ ) -> Result<()> {
+ let selections = self.selections.disjoint_anchors();
+ match selections.last() {
+ Some(last) if selections.len() >= 2 => {
+ self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
+ s.select_ranges([last.range()]);
+ });
+ }
+ _ => self.select_previous(
+ &SelectPrevious {
+ replace_newest: true,
+ },
+ window,
+ cx,
+ )?,
+ }
+ Ok(())
+ }
+
pub fn toggle_comments(
&mut self,
action: &ToggleComments,
@@ -325,6 +325,12 @@ impl EditorElement {
register_action(editor, window, |editor, action, window, cx| {
editor.select_previous(action, window, cx).log_err();
});
+ register_action(editor, window, |editor, action, window, cx| {
+ editor.find_next_match(action, window, cx).log_err();
+ });
+ register_action(editor, window, |editor, action, window, cx| {
+ editor.find_previous_match(action, window, cx).log_err();
+ });
register_action(editor, window, Editor::toggle_comments);
register_action(editor, window, Editor::select_larger_syntax_node);
register_action(editor, window, Editor::select_smaller_syntax_node);