diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 6395a81..714f861 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -338,19 +338,24 @@ impl Editor { pub fn insert_text_at_cursor(&mut self, text: &str) { // TODO: handle multiple cursors. - let mark = self.buffer.mark_sets[self.c_msi].main().unwrap(); - let range = mark.range(); + let range = self.buffer.mark_sets[self.c_msi][0].range(); + // Do the edit. self.buffer.edit((range.start, range.end), text); + // Adjust cursor position. + let len = text.chars().count(); + self.buffer.mark_sets[self.c_msi][0].head = range.start + len; + self.buffer.mark_sets[self.c_msi][0].tail = range.start + len; + self.buffer.mark_sets[self.c_msi][0].hh_pos = None; + // Adjust view self.move_view_to_cursor(); } pub fn insert_tab_at_cursor(&mut self) { // TODO: handle multiple cursors. - let mark = self.buffer.mark_sets[self.c_msi].main().unwrap(); - let range = mark.range(); + let range = self.buffer.mark_sets[self.c_msi][0].range(); if self.soft_tabs { // Figure out how many spaces to insert @@ -368,8 +373,18 @@ impl Editor { ]; self.buffer .edit((range.start, range.end), space_strs[space_count]); + + // Adjust cursor position. + self.buffer.mark_sets[self.c_msi][0].head = range.start + space_count; + self.buffer.mark_sets[self.c_msi][0].tail = range.start + space_count; + self.buffer.mark_sets[self.c_msi][0].hh_pos = None; } else { self.buffer.edit((range.start, range.end), "\t"); + + // Adjust cursor position. + self.buffer.mark_sets[self.c_msi][0].head = range.start + 1; + self.buffer.mark_sets[self.c_msi][0].tail = range.start + 1; + self.buffer.mark_sets[self.c_msi][0].hh_pos = None; } // Adjust view diff --git a/sub_crates/backend/src/marks.rs b/sub_crates/backend/src/marks.rs index b8714b9..a6a9b1a 100644 --- a/sub_crates/backend/src/marks.rs +++ b/sub_crates/backend/src/marks.rs @@ -78,7 +78,7 @@ impl Mark { // Head. let head = if self.head > range.1 { self.head + new_len - (range.1 - range.0) - } else if self.head >= range.0 { + } else if self.head > range.0 { range.0 + new_len } else { self.head @@ -87,7 +87,7 @@ impl Mark { // Tail. let tail = if self.tail > range.1 { self.tail + new_len - (range.1 - range.0) - } else if self.tail >= range.0 { + } else if self.tail > range.0 { range.0 + new_len } else { self.tail