append mode

pull/1/head
Blaž Hrastnik 4 years ago
parent dd749bb284
commit 67017e5336

@ -1,3 +1,4 @@
use crate::graphemes::next_grapheme_boundary;
use crate::selection::Range; use crate::selection::Range;
use crate::state::{Direction, Granularity, Mode, State}; use crate::state::{Direction, Granularity, Mode, State};
use crate::transaction::{ChangeSet, Transaction}; use crate::transaction::{ChangeSet, Transaction};
@ -74,9 +75,10 @@ pub fn append_mode(state: &mut State, _count: usize) {
state.mode = Mode::Insert; state.mode = Mode::Insert;
// TODO: as transaction // TODO: as transaction
let text = &state.doc.slice(..);
state.selection = state.selection.clone().transform(|range| { state.selection = state.selection.clone().transform(|range| {
// TODO: to() + next char // TODO: to() + next char
Range::new(range.from(), range.to()) Range::new(range.from(), next_grapheme_boundary(text, range.to()))
}) })
} }
@ -86,6 +88,7 @@ pub fn append_mode(state: &mut State, _count: usize) {
// O inserts a new line after each line with a selection // O inserts a new line after each line with a selection
pub fn normal_mode(state: &mut State, _count: usize) { pub fn normal_mode(state: &mut State, _count: usize) {
// TODO: if leaving append mode, move cursor back by 1
state.mode = Mode::Normal; state.mode = Mode::Normal;
} }

@ -120,6 +120,10 @@ pub fn default() -> Keymap {
code: KeyCode::Char('i'), code: KeyCode::Char('i'),
modifiers: Modifiers::NONE modifiers: Modifiers::NONE
} => commands::insert_mode as Command, } => commands::insert_mode as Command,
Key {
code: KeyCode::Char('a'),
modifiers: Modifiers::NONE
} => commands::append_mode as Command,
Key { Key {
code: KeyCode::Esc, code: KeyCode::Esc,
modifiers: Modifiers::NONE modifiers: Modifiers::NONE

Loading…
Cancel
Save