summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-core/src/commands.rs25
-rw-r--r--helix-core/src/selection.rs1
-rw-r--r--helix-core/src/state.rs4
-rw-r--r--helix-term/Cargo.toml4
-rw-r--r--helix-term/src/keymap.rs20
5 files changed, 28 insertions, 26 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
diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml
index 081b8f58..3a8321aa 100644
--- a/helix-term/Cargo.toml
+++ b/helix-term/Cargo.toml
@@ -10,10 +10,6 @@ edition = "2018"
name = "hx"
path = "src/main.rs"
-[[bin]]
-name = "line"
-path = "src/line.rs"
-
[dependencies]
# termwiz = { git = "https://github.com/wez/wezterm", features = ["widgets"] }
# termwiz = { path = "../../wezterm/termwiz", default-features = false, features = ["widgets"] }
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index b2d6738b..849f7281 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -1,4 +1,4 @@
-use crossterm::event::{KeyEvent as Key, KeyModifiers as Modifiers};
+use crossterm::event::{KeyCode, KeyEvent as Key, KeyModifiers as Modifiers};
use helix_core::commands::{self, Command};
use std::collections::HashMap;
@@ -97,20 +97,20 @@ type Keymap = HashMap<Key, Command>;
fn default() -> Keymap {
hashmap!(
Key {
- code: "h",
+ code: KeyCode::Char('h'),
modifiers: Modifiers::NONE
- } => commands::move_char_left,
+ } => commands::move_char_left as Command,
Key {
- code: "j",
+ code: KeyCode::Char('j'),
modifiers: Modifiers::NONE
- } => commands::move_line_down,
+ } => commands::move_line_down as Command,
Key {
- code: "k",
+ code: KeyCode::Char('k'),
modifiers: Modifiers::NONE
- } => commands::move_line_up,
+ } => commands::move_line_up as Command,
Key {
- code: "l",
+ code: KeyCode::Char('l'),
modifiers: Modifiers::NONE
- } => commands::move_char_right,
- );
+ } => commands::move_char_right as Command,
+ )
}