aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs17
-rw-r--r--helix-term/src/keymap.rs1
2 files changed, 18 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index e3c351f6..025639a5 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -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??)
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index 4343a0b6..cd4d3a32 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -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,