From 01e691c5baceb764ac896a35141e7b543110d673 Mon Sep 17 00:00:00 2001 From: Stefan Holderbach Date: Mon, 17 Jan 2022 21:31:21 +0100 Subject: [PATCH] Fix unicode word wrapping with ansi-cut (#767) Ansi-cut expects ranges of character numbers (of the non-ansi control sequence characters) instead of byte indices. This fixes the panics when wrapping of non-unicode lines (which exceed the demanded number of characters as byte indices). Also rectifies some wrong wrapping of unicdoe containing lines that don't panic --- crates/nu-table/src/wrap.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/nu-table/src/wrap.rs b/crates/nu-table/src/wrap.rs index 98b51b6d45..7b1a713db4 100644 --- a/crates/nu-table/src/wrap.rs +++ b/crates/nu-table/src/wrap.rs @@ -152,7 +152,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec { let mut end_index; let word_no_ansi = strip_ansi(word); - for c in word_no_ansi.char_indices() { + for c in word_no_ansi.chars().enumerate() { if let Some(width) = c.1.width() { end_index = c.0; if current_width + width > cell_width { @@ -169,7 +169,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec { } } - if start_index != word.len() { + if start_index != word_no_ansi.chars().count() { output.push(Subline { subline: word.cut(start_index..), width: current_width,