Implement 'remove_primary_selection' as Alt-,
This allows removing search matches from the selection Fixes #713
This commit is contained in:
parent
75dba1f956
commit
2e0803c8d9
3 changed files with 27 additions and 0 deletions
|
@ -360,6 +360,15 @@ impl Selection {
|
|||
self.normalize()
|
||||
}
|
||||
|
||||
/// Adds a new range to the selection and makes it the primary range.
|
||||
pub fn remove(mut self, index: usize) -> Self {
|
||||
self.ranges.remove(index);
|
||||
if index < self.primary_index || self.primary_index == self.ranges.len() {
|
||||
self.primary_index -= 1;
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
/// Map selections over a set of changes. Useful for adjusting the selection position after
|
||||
/// applying changes to a document.
|
||||
pub fn map(self, changes: &ChangeSet) -> Self {
|
||||
|
|
|
@ -290,6 +290,7 @@ impl Command {
|
|||
join_selections, "Join lines inside selection",
|
||||
keep_selections, "Keep selections matching regex",
|
||||
keep_primary_selection, "Keep primary selection",
|
||||
remove_primary_selection, "Remove primary selection",
|
||||
completion, "Invoke completion popup",
|
||||
hover, "Show docs for item under cursor",
|
||||
toggle_comments, "Comment/uncomment selections",
|
||||
|
@ -4016,11 +4017,27 @@ fn keep_selections(cx: &mut Context) {
|
|||
|
||||
fn keep_primary_selection(cx: &mut Context) {
|
||||
let (view, doc) = current!(cx.editor);
|
||||
// TODO: handle count
|
||||
|
||||
let range = doc.selection(view.id).primary();
|
||||
doc.set_selection(view.id, Selection::single(range.anchor, range.head));
|
||||
}
|
||||
|
||||
fn remove_primary_selection(cx: &mut Context) {
|
||||
let (view, doc) = current!(cx.editor);
|
||||
// TODO: handle count
|
||||
|
||||
let selection = doc.selection(view.id);
|
||||
if selection.len() == 1 {
|
||||
cx.editor.set_error("no selections remaining".to_owned());
|
||||
return;
|
||||
}
|
||||
let index = selection.primary_index();
|
||||
let selection = selection.clone().remove(index);
|
||||
|
||||
doc.set_selection(view.id, selection);
|
||||
}
|
||||
|
||||
fn completion(cx: &mut Context) {
|
||||
// trigger on trigger char, or if user calls it
|
||||
// (or on word char typing??)
|
||||
|
|
|
@ -499,6 +499,7 @@ impl Default for Keymaps {
|
|||
// TODO: and another method for inverse
|
||||
|
||||
"," => keep_primary_selection,
|
||||
"A-," => remove_primary_selection,
|
||||
|
||||
// "q" => record_macro,
|
||||
// "Q" => replay_macro,
|
||||
|
|
Loading…
Reference in a new issue