diff --git a/crates/gpui/src/text_system/line_wrapper.rs b/crates/gpui/src/text_system/line_wrapper.rs index 457316f353a48fa112de1736b2b7eaa2d4c72313..48daee6fa12ac792b66ca749347c1aa1e8f37b3c 100644 --- a/crates/gpui/src/text_system/line_wrapper.rs +++ b/crates/gpui/src/text_system/line_wrapper.rs @@ -201,9 +201,10 @@ impl LineWrapper { self.should_truncate_line(&line, truncate_width, truncation_affix, truncate_from) { let result = match truncate_from { - TruncateFrom::Start => { - SharedString::from(format!("{truncation_affix}{}", &line[truncate_ix + 1..])) - } + TruncateFrom::Start => SharedString::from(format!( + "{truncation_affix}{}", + &line[line.ceil_char_boundary(truncate_ix + 1)..] + )), TruncateFrom::End => { SharedString::from(format!("{}{truncation_affix}", &line[..truncate_ix])) } @@ -600,12 +601,19 @@ mod tests { "aa bbb cccc dddd......", "......", ); + perform_test( + &mut wrapper, + "aa bbb cccc 🦀🦀🦀🦀🦀 eeee ffff gggg", + "aa bbb cccc 🦀🦀🦀🦀…", + "…", + ); } #[test] fn test_truncate_line_start() { let mut wrapper = build_wrapper(); + #[track_caller] fn perform_test( wrapper: &mut LineWrapper, text: &'static str, @@ -643,6 +651,12 @@ mod tests { "......dddd eeee fff gg", "......", ); + perform_test( + &mut wrapper, + "aaaa bbbb cccc 🦀🦀🦀🦀🦀 eeee fff gg", + "…🦀🦀🦀🦀 eeee fff gg", + "…", + ); } #[test]