From 4f05e9f4a6eb0a7b494926213c9ae1e42b9c6b8d Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Fri, 18 Mar 2022 06:27:33 -0500 Subject: [PATCH] add a display of what the colors look like in `ansi --list` (#4866) * add a display of what the colors look like in `ansi --list` * change 'color' to 'preview' - add the ability to turn it off via config with use_ansi_coloring --- crates/nu-command/src/platform/ansi/ansi_.rs | 30 +++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/crates/nu-command/src/platform/ansi/ansi_.rs b/crates/nu-command/src/platform/ansi/ansi_.rs index 50340dc0c8..5f4f17066e 100644 --- a/crates/nu-command/src/platform/ansi/ansi_.rs +++ b/crates/nu-command/src/platform/ansi/ansi_.rs @@ -309,9 +309,10 @@ Format: # let list: bool = call.has_flag("list"); let escape: bool = call.has_flag("escape"); let osc: bool = call.has_flag("osc"); + let use_ansi_coloring = stack.get_config()?.use_ansi_coloring; if list { - return generate_ansi_code_list(engine_state, call.head); + return generate_ansi_code_list(engine_state, call.head, use_ansi_coloring); } // The code can now be one of the ansi abbreviations like green_bold @@ -416,16 +417,37 @@ pub fn str_to_ansi(s: &str) -> Option { fn generate_ansi_code_list( engine_state: &nu_protocol::engine::EngineState, call_span: Span, + use_ansi_coloring: bool, ) -> Result { return Ok(CODE_LIST .iter() - .map(move |ansi_code| { - let cols = vec!["name".into(), "short name".into(), "code".into()]; + .enumerate() + .map(move |(i, ansi_code)| { + let cols = if use_ansi_coloring { + vec![ + "name".into(), + "preview".into(), + "short name".into(), + "code".into(), + ] + } else { + vec!["name".into(), "short name".into(), "code".into()] + }; let name: Value = Value::string(String::from(ansi_code.long_name), call_span); let short_name = Value::string(ansi_code.short_name.unwrap_or(""), call_span); + // The first 96 items in the ansi array are colors + let preview = if i < 96 { + Value::string(format!("{}NUSHELL\u{1b}[0m", &ansi_code.code), call_span) + } else { + Value::string("\u{1b}[0m", call_span) + }; let code_string = String::from(&ansi_code.code.replace('\u{1b}', "")); let code = Value::string(code_string, call_span); - let vals = vec![name, short_name, code]; + let vals = if use_ansi_coloring { + vec![name, preview, short_name, code] + } else { + vec![name, short_name, code] + }; Value::Record { cols, vals,