diff options
author | Blaž Hrastnik | 2020-10-01 09:44:12 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2020-10-01 09:44:12 +0000 |
commit | 5945815d978da07d0970502d481c17ef02525c4d (patch) | |
tree | db8e77f9aef2d14977588d73d71319822c5ef7ff /helix-view/src | |
parent | d9d59cd209c9cbd1397ed4d05b1d14a6aad514bf (diff) |
Fix cursor rendering & placement on append mode.
Diffstat (limited to 'helix-view/src')
-rw-r--r-- | helix-view/src/commands.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/helix-view/src/commands.rs b/helix-view/src/commands.rs index 2b2f1239..93ec2632 100644 --- a/helix-view/src/commands.rs +++ b/helix-view/src/commands.rs @@ -186,6 +186,7 @@ pub fn insert_mode(view: &mut View, _count: usize) { // inserts at the end of each selection pub fn append_mode(view: &mut View, _count: usize) { view.state.mode = Mode::Insert; + view.state.restore_cursor = true; // TODO: as transaction let text = &view.state.doc.slice(..); @@ -268,8 +269,20 @@ pub fn open_below(view: &mut View, _count: usize) { // O inserts a new line before each line with a selection pub fn normal_mode(view: &mut View, _count: usize) { - // TODO: if leaving append mode, move cursor back by 1 view.state.mode = Mode::Normal; + + // if leaving append mode, move cursor back by 1 + if view.state.restore_cursor { + let text = &view.state.doc.slice(..); + view.state.selection = view.state.selection.transform(|range| { + Range::new( + range.from(), + graphemes::prev_grapheme_boundary(text, range.to()), + ) + }); + + view.state.restore_cursor = false; + } } // TODO: insert means add text just before cursor, on exit we should be on the last letter. |