mirror of
https://github.com/nushell/nushell
synced 2024-12-26 13:03:07 +00:00
Fix coloring when string has spaces (#5425)
* Replace ansi-cut with ansi-str There's no issues with it we just need to use it later. Signed-off-by: Maxim Zhiburt <zhiburt@gmail.com> * Fix color losing in string spliting into Sublines Signed-off-by: Maxim Zhiburt <zhiburt@gmail.com>
This commit is contained in:
parent
e36649f74b
commit
ac48f5a318
3 changed files with 17 additions and 17 deletions
20
Cargo.lock
generated
20
Cargo.lock
generated
|
@ -62,15 +62,6 @@ dependencies = [
|
||||||
"alloc-no-stdlib",
|
"alloc-no-stdlib",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ansi-cut"
|
|
||||||
version = "0.2.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ffe8d2994390ae20a3eb52a909f9518a89f8fd7e6990f3d25d38e51021b2c8ce"
|
|
||||||
dependencies = [
|
|
||||||
"ansi-parser",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi-parser"
|
name = "ansi-parser"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
@ -81,6 +72,15 @@ dependencies = [
|
||||||
"nom 4.2.3",
|
"nom 4.2.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ansi-str"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90cb0ceb8c444d026166795e474e9dfe54b443bdc07cc21bd6c5073f5e637482"
|
||||||
|
dependencies = [
|
||||||
|
"ansi-parser",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi_term"
|
name = "ansi_term"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
@ -2678,7 +2678,7 @@ dependencies = [
|
||||||
name = "nu-table"
|
name = "nu-table"
|
||||||
version = "0.61.1"
|
version = "0.61.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi-cut",
|
"ansi-str",
|
||||||
"atty",
|
"atty",
|
||||||
"nu-ansi-term",
|
"nu-ansi-term",
|
||||||
"nu-protocol",
|
"nu-protocol",
|
||||||
|
|
|
@ -17,5 +17,5 @@ nu-protocol = { path = "../nu-protocol", version = "0.61.1" }
|
||||||
regex = "1.4"
|
regex = "1.4"
|
||||||
unicode-width = "0.1.8"
|
unicode-width = "0.1.8"
|
||||||
strip-ansi-escapes = "0.1.1"
|
strip-ansi-escapes = "0.1.1"
|
||||||
ansi-cut = "0.2.0"
|
ansi-str = "0.1.1"
|
||||||
atty = "0.2.14"
|
atty = "0.2.14"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::table::TextStyle;
|
use crate::table::TextStyle;
|
||||||
use ansi_cut::AnsiCut;
|
use ansi_str::AnsiStr;
|
||||||
use nu_ansi_term::Style;
|
use nu_ansi_term::Style;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
@ -92,9 +92,9 @@ fn strip_ansi(string: &str) -> Cow<str> {
|
||||||
|
|
||||||
pub fn split_sublines(input: &str) -> Vec<Vec<Subline>> {
|
pub fn split_sublines(input: &str) -> Vec<Vec<Subline>> {
|
||||||
input
|
input
|
||||||
.split_terminator('\n')
|
.ansi_split("\n")
|
||||||
.map(|line| {
|
.map(|line| {
|
||||||
line.split_terminator(' ')
|
line.ansi_split(" ")
|
||||||
.map(|x| Subline {
|
.map(|x| Subline {
|
||||||
subline: x.to_string(),
|
subline: x.to_string(),
|
||||||
width: {
|
width: {
|
||||||
|
@ -109,7 +109,7 @@ pub fn split_sublines(input: &str) -> Vec<Vec<Subline>> {
|
||||||
// let c = strip_ansi(x).chars().count();
|
// let c = strip_ansi(x).chars().count();
|
||||||
// let u = special_width(x);
|
// let u = special_width(x);
|
||||||
// std::cmp::max(c, u)
|
// std::cmp::max(c, u)
|
||||||
let stripped = strip_ansi(x);
|
let stripped = strip_ansi(&x);
|
||||||
|
|
||||||
let c = stripped.chars().count();
|
let c = stripped.chars().count();
|
||||||
let u = stripped.width();
|
let u = stripped.width();
|
||||||
|
@ -159,7 +159,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec<Subline> {
|
||||||
end_index = c.0;
|
end_index = c.0;
|
||||||
if current_width + width > cell_width {
|
if current_width + width > cell_width {
|
||||||
output.push(Subline {
|
output.push(Subline {
|
||||||
subline: word.cut(start_index..end_index),
|
subline: word.ansi_cut(start_index..end_index),
|
||||||
width: current_width,
|
width: current_width,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ fn split_word(cell_width: usize, word: &str) -> Vec<Subline> {
|
||||||
|
|
||||||
if start_index != word_no_ansi.len() {
|
if start_index != word_no_ansi.len() {
|
||||||
output.push(Subline {
|
output.push(Subline {
|
||||||
subline: word.cut(start_index..),
|
subline: word.ansi_cut(start_index..),
|
||||||
width: current_width,
|
width: current_width,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue