mirror of
https://github.com/nushell/nushell
synced 2024-12-27 13:33:16 +00:00
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
This commit is contained in:
parent
ac36f32647
commit
01e691c5ba
1 changed files with 2 additions and 2 deletions
|
@ -152,7 +152,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec<Subline> {
|
||||||
let mut end_index;
|
let mut end_index;
|
||||||
|
|
||||||
let word_no_ansi = strip_ansi(word);
|
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() {
|
if let Some(width) = c.1.width() {
|
||||||
end_index = c.0;
|
end_index = c.0;
|
||||||
if current_width + width > cell_width {
|
if current_width + width > cell_width {
|
||||||
|
@ -169,7 +169,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec<Subline> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if start_index != word.len() {
|
if start_index != word_no_ansi.chars().count() {
|
||||||
output.push(Subline {
|
output.push(Subline {
|
||||||
subline: word.cut(start_index..),
|
subline: word.cut(start_index..),
|
||||||
width: current_width,
|
width: current_width,
|
||||||
|
|
Loading…
Reference in a new issue