Add new actions editor::FindNextMatch
and editor::FindPreviousMatch
(#28559)
Closes #7903 Release Notes: - Add new actions `editor::FindNextMatch` and `editor::FindPreviousMatch` that are similar to `editor::SelectNext` and `editor::SelectPrevious` with `"replace_newest": true`, but jumps to the first or last selection when there are multiple selections.
This commit is contained in:
parent
c35238bd72
commit
ad39d3226f
5 changed files with 62 additions and 2 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue