aboutsummaryrefslogtreecommitdiff
path: root/helix-core/src/commands.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-09-13 02:32:37 +0000
committerBlaž Hrastnik2020-09-13 02:32:37 +0000
commitd466882d0432b7e9cf905041aa7a4f8d56047de0 (patch)
tree4f4a935feb4c4cf2a77cc3c6a2e4ad822d1a9825 /helix-core/src/commands.rs
parentf098166571fd8fc2046d49355dffc0d2aad29e50 (diff)
Abstract Transaction::change_by_selection, working del/backspace.
Diffstat (limited to 'helix-core/src/commands.rs')
-rw-r--r--helix-core/src/commands.rs34
1 files changed, 32 insertions, 2 deletions
diff --git a/helix-core/src/commands.rs b/helix-core/src/commands.rs
index fdb3fab6..860ec1cb 100644
--- a/helix-core/src/commands.rs
+++ b/helix-core/src/commands.rs
@@ -1,4 +1,4 @@
-use crate::graphemes::next_grapheme_boundary;
+use crate::graphemes;
use crate::selection::Range;
use crate::state::{Direction, Granularity, Mode, State};
use crate::transaction::{ChangeSet, Transaction};
@@ -53,7 +53,10 @@ pub fn append_mode(state: &mut State, _count: usize) {
let text = &state.doc.slice(..);
state.selection = state.selection.transform(|range| {
// TODO: to() + next char
- Range::new(range.from(), next_grapheme_boundary(text, range.to()))
+ Range::new(
+ range.from(),
+ graphemes::next_grapheme_boundary(text, range.to()),
+ )
})
}
@@ -75,3 +78,30 @@ pub fn insert_char(state: &mut State, c: char) {
transaction.apply(state);
// TODO: need to store into history if successful
}
+
+// TODO: handle indent-aware delete
+pub fn delete_char_backward(state: &mut State, count: usize) {
+ let text = &state.doc.slice(..);
+ let transaction = Transaction::change_by_selection(state, |range| {
+ (
+ graphemes::nth_prev_grapheme_boundary(text, range.head, count),
+ range.head,
+ None,
+ )
+ });
+ transaction.apply(state);
+ // TODO: need to store into history if successful
+}
+
+pub fn delete_char_forward(state: &mut State, count: usize) {
+ let text = &state.doc.slice(..);
+ let transaction = Transaction::change_by_selection(state, |range| {
+ (
+ graphemes::nth_next_grapheme_boundary(text, range.head, count),
+ range.head,
+ None,
+ )
+ });
+ transaction.apply(state);
+ // TODO: need to store into history if successful
+}