diff options
-rw-r--r-- | helix-core/src/commands.rs | 25 | ||||
-rw-r--r-- | helix-core/src/selection.rs | 1 | ||||
-rw-r--r-- | helix-core/src/state.rs | 4 | ||||
-rw-r--r-- | helix-term/Cargo.toml | 4 | ||||
-rw-r--r-- | helix-term/src/keymap.rs | 20 |
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, + ) } |