summaryrefslogtreecommitdiff
path: root/helix-core/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-core/src')
-rw-r--r--helix-core/src/commands.rs25
-rw-r--r--helix-core/src/selection.rs1
-rw-r--r--helix-core/src/state.rs4
3 files changed, 18 insertions, 12 deletions
diff --git a/helix-core/src/commands.rs b/helix-core/src/commands.rs
index 78a1481a..62e97686 100644
--- a/helix-core/src/commands.rs
+++ b/helix-core/src/commands.rs
@@ -2,42 +2,47 @@ use crate::state::{Direction, Granularity, State};
/// A command is a function that takes the current state and a count, and does a side-effect on the
/// state (usually by creating and applying a transaction).
-type Command = fn(state: &mut State, count: usize);
+pub type Command = fn(state: &mut State, count: usize);
-fn move_char_left(state: &mut State, count: usize) {
+pub fn move_char_left(state: &mut State, count: usize) {
// TODO: use a transaction
- state.selection = state.move_selection(
- state.selection,
+ let selection = state.move_selection(
+ // TODO: remove the clone here
+ state.selection.clone(),
Direction::Backward,
Granularity::Character,
count,
);
+ state.selection = selection;
}
-fn move_char_right(state: &mut State, count: usize) {
+pub fn move_char_right(state: &mut State, count: usize) {
// TODO: use a transaction
state.selection = state.move_selection(
- state.selection,
+ // TODO: remove the clone here
+ state.selection.clone(),
Direction::Forward,
Granularity::Character,
count,
);
}
-fn move_line_up(state: &mut State, count: usize) {
+pub fn move_line_up(state: &mut State, count: usize) {
// TODO: use a transaction
state.selection = state.move_selection(
- state.selection,
+ // TODO: remove the clone here
+ state.selection.clone(),
Direction::Backward,
Granularity::Line,
count,
);
}
-fn move_line_down(state: &mut State, count: usize) {
+pub fn move_line_down(state: &mut State, count: usize) {
// TODO: use a transaction
state.selection = state.move_selection(
- state.selection,
+ // TODO: remove the clone here
+ state.selection.clone(),
Direction::Forward,
Granularity::Line,
count,
diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs
index b02560a8..3e28c9ce 100644
--- a/helix-core/src/selection.rs
+++ b/helix-core/src/selection.rs
@@ -97,6 +97,7 @@ impl Range {
}
/// A selection consists of one or more selection ranges.
+#[derive(Debug, Clone)]
pub struct Selection {
// TODO: decide how many ranges to inline SmallVec<[Range; 1]>
pub(crate) ranges: SmallVec<[Range; 1]>,
diff --git a/helix-core/src/state.rs b/helix-core/src/state.rs
index 7eae467d..05380d5e 100644
--- a/helix-core/src/state.rs
+++ b/helix-core/src/state.rs
@@ -142,8 +142,8 @@ fn move_vertically(text: &RopeSlice, dir: Direction, pos: usize, count: usize) -
let (line, col) = coords_at_pos(text, pos);
let new_line = match dir {
- Direction::Backward => line.saturating_sub(n),
- Direction::Forward => std::cmp::min(line.saturating_add(n), text.len_lines() - 1),
+ Direction::Backward => line.saturating_sub(count),
+ Direction::Forward => std::cmp::min(line.saturating_add(count), text.len_lines() - 1),
};
// convert to 0-indexed