diff options
Diffstat (limited to 'helix-view/src')
-rw-r--r-- | helix-view/src/commands.rs | 35 | ||||
-rw-r--r-- | helix-view/src/keymap.rs | 12 |
2 files changed, 47 insertions, 0 deletions
diff --git a/helix-view/src/commands.rs b/helix-view/src/commands.rs index 560167c9..be3ea0b9 100644 --- a/helix-view/src/commands.rs +++ b/helix-view/src/commands.rs @@ -39,6 +39,41 @@ pub fn move_line_down(view: &mut View, count: usize) { .move_selection(Direction::Forward, Granularity::Line, count); } +pub fn move_next_word_start(view: &mut View, count: usize) { + let pos = view.state.move_pos( + view.state.selection.cursor(), + Direction::Forward, + Granularity::Word, + count, + ); + + // TODO: use a transaction + view.state.selection = Selection::single(pos, pos); +} + +pub fn move_prev_word_start(view: &mut View, count: usize) { + let pos = view.state.move_pos( + view.state.selection.cursor(), + Direction::Backward, + Granularity::Word, + count, + ); + + // TODO: use a transaction + view.state.selection = Selection::single(pos, pos); +} + +pub fn move_next_word_end(view: &mut View, count: usize) { + let pos = State::move_next_word_end( + &view.state.doc().slice(..), + view.state.selection.cursor(), + count, + ); + + // TODO: use a transaction + view.state.selection = Selection::single(pos, pos); +} + // avoid select by default by having a visual mode switch that makes movements into selects // insert mode: diff --git a/helix-view/src/keymap.rs b/helix-view/src/keymap.rs index 705357a8..9fabf41d 100644 --- a/helix-view/src/keymap.rs +++ b/helix-view/src/keymap.rs @@ -103,6 +103,18 @@ pub fn default() -> Keymaps { modifiers: Modifiers::NONE }] => commands::move_char_right as Command, vec![Key { + code: KeyCode::Char('w'), + modifiers: Modifiers::NONE + }] => commands::move_next_word_start as Command, + vec![Key { + code: KeyCode::Char('b'), + modifiers: Modifiers::NONE + }] => commands::move_prev_word_start as Command, + vec![Key { + code: KeyCode::Char('e'), + modifiers: Modifiers::NONE + }] => commands::move_next_word_end as Command, + vec![Key { code: KeyCode::Char('i'), modifiers: Modifiers::NONE }] => commands::insert_mode as Command, |