diff options
author | Blaž Hrastnik | 2020-09-13 02:32:37 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2020-09-13 02:32:37 +0000 |
commit | d466882d0432b7e9cf905041aa7a4f8d56047de0 (patch) | |
tree | 4f4a935feb4c4cf2a77cc3c6a2e4ad822d1a9825 /helix-core/src/commands.rs | |
parent | f098166571fd8fc2046d49355dffc0d2aad29e50 (diff) |
Abstract Transaction::change_by_selection, working del/backspace.
Diffstat (limited to 'helix-core/src/commands.rs')
-rw-r--r-- | helix-core/src/commands.rs | 34 |
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 +} |