aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view/src')
-rw-r--r--helix-view/src/commands.rs11
-rw-r--r--helix-view/src/keymap.rs4
2 files changed, 15 insertions, 0 deletions
diff --git a/helix-view/src/commands.rs b/helix-view/src/commands.rs
index d868a17c..fc18e3a7 100644
--- a/helix-view/src/commands.rs
+++ b/helix-view/src/commands.rs
@@ -1,8 +1,11 @@
use helix_core::{
graphemes,
+ regex::Regex,
+ selection,
state::{Direction, Granularity, Mode, State},
Range, Selection, Tendril, Transaction,
};
+use once_cell::sync::Lazy;
use crate::view::View;
@@ -144,6 +147,14 @@ pub fn extend_line_down(view: &mut View, count: usize) {
.extend_selection(Direction::Forward, Granularity::Line, count);
}
+pub fn split_selection_on_newline(view: &mut View, _count: usize) {
+ let text = &view.state.doc.slice(..);
+ // only compile the regex once
+ static REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"\n").unwrap());
+ // TODO: use a transaction
+ view.state.selection = selection::split_on_matches(text, view.state.selection(), &REGEX)
+}
+
pub fn delete_selection(view: &mut View, _count: usize) {
let transaction =
Transaction::change_by_selection(&view.state, |range| (range.from(), range.to(), None));
diff --git a/helix-view/src/keymap.rs b/helix-view/src/keymap.rs
index 750f1a5f..078f2bf1 100644
--- a/helix-view/src/keymap.rs
+++ b/helix-view/src/keymap.rs
@@ -175,6 +175,10 @@ pub fn default() -> Keymaps {
modifiers: Modifiers::NONE
}] => commands::change_selection as Command,
vec![Key {
+ code: KeyCode::Char('s'),
+ modifiers: Modifiers::NONE
+ }] => commands::split_selection_on_newline as Command,
+ vec![Key {
code: KeyCode::Esc,
modifiers: Modifiers::NONE
}] => commands::normal_mode as Command,