From 26ad2ffb8cb5333b1f71d33c3f8326435296f850 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Thu, 30 Nov 2023 11:04:14 +0100 Subject: [PATCH] try to use lscolors gnu_legacy --- Cargo.toml | 2 +- src/uu/ls/Cargo.toml | 2 +- src/uu/ls/src/ls.rs | 6 +++- tests/by-util/test_ls.rs | 77 ++++++++++++++++++++++++++++++---------- 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 14e700ee0a6..47e8744b181 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -288,7 +288,7 @@ indicatif = "0.17" itertools = "0.12.0" libc = "0.2.150" lscolors = { version = "0.16.0", default-features = false, features = [ - "nu-ansi-term", + "nu-ansi-term", "gnu_legacy", ] } memchr = "2" memmap2 = "0.9" diff --git a/src/uu/ls/Cargo.toml b/src/uu/ls/Cargo.toml index 96cf7df1a0d..16ccc4ef4d2 100644 --- a/src/uu/ls/Cargo.toml +++ b/src/uu/ls/Cargo.toml @@ -22,7 +22,7 @@ number_prefix = { workspace = true } uutils_term_grid = { workspace = true } terminal_size = { workspace = true } glob = { workspace = true } -lscolors = { workspace = true } +lscolors = { workspace = true, features = ["gnu_legacy"] } uucore = { workspace = true, features = [ "entries", "fs", diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index 88af56bb186..b9fef159894 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -3097,7 +3097,11 @@ fn display_file_name( fn color_name(name: String, path: &Path, md: Option<&Metadata>, ls_colors: &LsColors) -> String { match ls_colors.style_for_path_with_metadata(path, md) { Some(style) => { - return style.to_nu_ansi_term_style().paint(name).to_string(); + return style + .to_nu_ansi_term_style() + .reset_before_style() + .paint(name) + .to_string(); } None => name, } diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index 07ea8c9cd63..23328181a29 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -1174,7 +1174,17 @@ fn test_ls_long_symlink_color() { expected_target: &str, ) { // Names are always compared. + println!( + "name = {} / expected {}", + to_ascii_representation(name), + to_ascii_representation(expected_name) + ); assert_eq!(&name, &expected_name); + println!( + "target = {} / expected {}", + to_ascii_representation(target), + to_ascii_representation(expected_target) + ); assert_eq!(&target, &expected_target); // Colors are only compared when we have inferred what color we are looking for. @@ -1962,6 +1972,20 @@ fn test_ls_recursive_1() { .stdout_is(out); } +// Function to convert a string to its ASCII representation +fn to_ascii_representation(input: &str) -> String { + input + .chars() + .map(|c| { + if c.is_ascii_control() || !c.is_ascii() { + format!("\\x{:02x}", c as u32) + } else { + c.to_string() + } + }) + .collect::() +} + #[test] fn test_ls_color() { let scene = TestScenario::new(util_name!()); @@ -1980,9 +2004,9 @@ fn test_ls_color() { at.touch(nested_file); at.touch("test-color"); - let a_with_colors = "\x1b[1;34ma\x1b[0m"; - let z_with_colors = "\x1b[1;34mz\x1b[0m"; - let nested_dir_with_colors = "\x1b[1;34mnested_dir\x1b[0m"; // spell-checker:disable-line + let a_with_colors = "\x1b[0m\x1b[01;34ma\x1b[0m\x0a"; + let z_with_colors = "\x1b[0m\x1b[01;34mz\x1b[0m\x0a"; + let nested_dir_with_colors = "\x1b[0m\x1b[01;34mnested_dir\x1b[0m\x0anested_file\x0a"; // spell-checker:disable-line // Color is disabled by default let result = scene.ucmd().succeeds(); @@ -1991,12 +2015,19 @@ fn test_ls_color() { // Color should be enabled for param in ["--color", "--col", "--color=always", "--col=always"] { - scene - .ucmd() - .arg(param) - .succeeds() - .stdout_contains(a_with_colors) - .stdout_contains(z_with_colors); + println!( + "a_with_colors {} / z_with_colors {}", + to_ascii_representation(a_with_colors), + to_ascii_representation(z_with_colors) + ); + let result = scene.ucmd().arg(param).succeeds(); + println!( + "stdout = {} / ascii = {}", + result.stdout_str(), + to_ascii_representation(result.stdout_str()) + ); + assert!(result.stdout_str().contains(a_with_colors)); + assert!(result.stdout_str().contains(z_with_colors)); } // Color should be disabled @@ -2005,12 +2036,13 @@ fn test_ls_color() { assert!(!result.stdout_str().contains(z_with_colors)); // Nested dir should be shown and colored - scene - .ucmd() - .arg("--color") - .arg("a") - .succeeds() - .stdout_contains(nested_dir_with_colors); + let result = scene.ucmd().arg("--color").arg("a").succeeds(); + println!( + "stdout = {} / ascii = {}", + result.stdout_str(), + to_ascii_representation(result.stdout_str()) + ); + assert!(result.stdout_str().contains(nested_dir_with_colors)); // No output scene @@ -2022,13 +2054,22 @@ fn test_ls_color() { // The colors must not mess up the grid layout at.touch("b"); - scene + let result = scene .ucmd() .arg("--color") .arg("-w=15") .arg("-C") - .succeeds() - .stdout_only(format!("{a_with_colors} test-color\nb {z_with_colors}\n")); + .succeeds(); + println!( + "stdout = {} / ascii = {}", + result.stdout_str(), + to_ascii_representation(result.stdout_str()) + ); + println!( + "expected {}", + to_ascii_representation("{a_with_colors} test-color\nb {z_with_colors}\n") + ); + assert!(result.stdout_str() == format!("{a_with_colors} test-color\x0ab {z_with_colors}\n")); } #[cfg(unix)]