From db2f3b94ef27f2833bdd1a555fc260d9d5aa48c4 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 31 Jan 2024 13:53:36 -0700 Subject: [PATCH] Fix missing line separators in delete changes --- src/edit/editor.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/edit/editor.rs b/src/edit/editor.rs index d1f8a88..1797875 100644 --- a/src/edit/editor.rs +++ b/src/edit/editor.rs @@ -283,7 +283,7 @@ impl<'buffer> Edit<'buffer> for Editor<'buffer> { fn delete_range(&mut self, start: Cursor, end: Cursor) { let change_item = self.with_buffer_mut(|buffer| { // Collect removed data for change tracking - let mut change_text = String::new(); + let mut change_lines = Vec::new(); // Delete the selection from the last line let end_line_opt = if end.line > start.line { @@ -292,7 +292,7 @@ impl<'buffer> Edit<'buffer> for Editor<'buffer> { // Remove end line let removed = buffer.lines.remove(end.line); - change_text.insert_str(0, removed.text()); + change_lines.insert(0, removed.text().to_string()); Some(after) } else { @@ -302,7 +302,7 @@ impl<'buffer> Edit<'buffer> for Editor<'buffer> { // Delete interior lines (in reverse for safety) for line_i in (start.line + 1..end.line).rev() { let removed = buffer.lines.remove(line_i); - change_text.insert_str(0, removed.text()); + change_lines.insert(0, removed.text().to_string()); } // Delete the selection from the first line @@ -316,7 +316,7 @@ impl<'buffer> Edit<'buffer> for Editor<'buffer> { // Delete selected part of line let removed = buffer.lines[start.line].split_off(start.index); - change_text.insert_str(0, removed.text()); + change_lines.insert(0, removed.text().to_string()); // Re-add part of line after selection if let Some(after) = after_opt { @@ -332,7 +332,7 @@ impl<'buffer> Edit<'buffer> for Editor<'buffer> { ChangeItem { start, end, - text: change_text, + text: change_lines.join("\n"), insert: false, } });