From 883b77bd246433ab221f16ee7be53ced9beb7c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Sun, 4 Oct 2020 17:16:37 +0900 Subject: [PATCH] Fix transaction.invert()/.apply() using byte counts instead of char counts. --- helix-core/src/transaction.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs index 7a00a4f04..14cb1c41e 100644 --- a/helix-core/src/transaction.rs +++ b/helix-core/src/transaction.rs @@ -211,8 +211,9 @@ impl ChangeSet { pos += n; } Insert(s) => { - changes.push(Delete(s.len())); - len += s.len(); + let chars = s.chars().count(); + changes.push(Delete(chars)); + len += chars; } } } @@ -240,7 +241,7 @@ impl ChangeSet { } Insert(s) => { text.insert(pos, s); - pos += s.len(); + pos += s.chars().count(); } } } @@ -497,7 +498,7 @@ mod test { len: 12, }; - let doc = Rope::from("123 hello xz"); + let doc = Rope::from("世界3 hello xz"); let revert = changes.invert(&doc); let mut doc2 = doc.clone();