From e14588b2f6afe2a3b4884ea58e85c2a6ccd1cc84 Mon Sep 17 00:00:00 2001 From: Aaron Muir Hamilton Date: Mon, 24 Oct 2022 23:24:12 +0000 Subject: [PATCH] Fix edge cases relating to running Delete with your cursor half way through an egc. --- src/buffer.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/buffer.rs b/src/buffer.rs index 992e3a1..7fbce69 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -645,11 +645,14 @@ impl<'a> TextBuffer<'a> { let line = &mut self.lines[self.cursor.line.get()]; line.reset(); - for (i, c) in line.text.grapheme_indices(true) { - if i == self.cursor.index { - line.text.replace_range(i..(i + c.len()), ""); - break; - } + if let Some((i, c)) = line + .text + .grapheme_indices(true) + .take_while(|(i, c)| *i <= self.cursor.index) + .last() + { + line.text.replace_range(i..(i + c.len()), ""); + self.cursor.index = i; } } else if self.cursor.line.get() + 1 < self.lines.len() { let old_line = self.lines.remove(self.cursor.line.get() + 1);