mirror of
https://github.com/nushell/nushell.git
synced 2025-06-02 08:06:12 +02:00
allow user to use hex colors in config (#486)
This commit is contained in:
parent
ee6ab17fde
commit
3701fd1d76
@ -15,72 +15,97 @@ use std::collections::HashMap;
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
pub fn lookup_ansi_color_style(s: String) -> Style {
|
pub fn lookup_ansi_color_style(s: String) -> Style {
|
||||||
match s.as_str() {
|
if s.starts_with('#') {
|
||||||
"g" | "green" => Color::Green.normal(),
|
match color_from_hex(&s) {
|
||||||
"gb" | "green_bold" => Color::Green.bold(),
|
Ok(c) => match c {
|
||||||
"gu" | "green_underline" => Color::Green.underline(),
|
Some(c) => c.normal(),
|
||||||
"gi" | "green_italic" => Color::Green.italic(),
|
None => Style::default(),
|
||||||
"gd" | "green_dimmed" => Color::Green.dimmed(),
|
},
|
||||||
"gr" | "green_reverse" => Color::Green.reverse(),
|
Err(_) => Style::default(),
|
||||||
"gbl" | "green_blink" => Color::Green.blink(),
|
}
|
||||||
"gst" | "green_strike" => Color::Green.strikethrough(),
|
} else {
|
||||||
"r" | "red" => Color::Red.normal(),
|
match s.as_str() {
|
||||||
"rb" | "red_bold" => Color::Red.bold(),
|
"g" | "green" => Color::Green.normal(),
|
||||||
"ru" | "red_underline" => Color::Red.underline(),
|
"gb" | "green_bold" => Color::Green.bold(),
|
||||||
"ri" | "red_italic" => Color::Red.italic(),
|
"gu" | "green_underline" => Color::Green.underline(),
|
||||||
"rd" | "red_dimmed" => Color::Red.dimmed(),
|
"gi" | "green_italic" => Color::Green.italic(),
|
||||||
"rr" | "red_reverse" => Color::Red.reverse(),
|
"gd" | "green_dimmed" => Color::Green.dimmed(),
|
||||||
"rbl" | "red_blink" => Color::Red.blink(),
|
"gr" | "green_reverse" => Color::Green.reverse(),
|
||||||
"rst" | "red_strike" => Color::Red.strikethrough(),
|
"gbl" | "green_blink" => Color::Green.blink(),
|
||||||
"u" | "blue" => Color::Blue.normal(),
|
"gst" | "green_strike" => Color::Green.strikethrough(),
|
||||||
"ub" | "blue_bold" => Color::Blue.bold(),
|
"r" | "red" => Color::Red.normal(),
|
||||||
"uu" | "blue_underline" => Color::Blue.underline(),
|
"rb" | "red_bold" => Color::Red.bold(),
|
||||||
"ui" | "blue_italic" => Color::Blue.italic(),
|
"ru" | "red_underline" => Color::Red.underline(),
|
||||||
"ud" | "blue_dimmed" => Color::Blue.dimmed(),
|
"ri" | "red_italic" => Color::Red.italic(),
|
||||||
"ur" | "blue_reverse" => Color::Blue.reverse(),
|
"rd" | "red_dimmed" => Color::Red.dimmed(),
|
||||||
"ubl" | "blue_blink" => Color::Blue.blink(),
|
"rr" | "red_reverse" => Color::Red.reverse(),
|
||||||
"ust" | "blue_strike" => Color::Blue.strikethrough(),
|
"rbl" | "red_blink" => Color::Red.blink(),
|
||||||
"b" | "black" => Color::Black.normal(),
|
"rst" | "red_strike" => Color::Red.strikethrough(),
|
||||||
"bb" | "black_bold" => Color::Black.bold(),
|
"u" | "blue" => Color::Blue.normal(),
|
||||||
"bu" | "black_underline" => Color::Black.underline(),
|
"ub" | "blue_bold" => Color::Blue.bold(),
|
||||||
"bi" | "black_italic" => Color::Black.italic(),
|
"uu" | "blue_underline" => Color::Blue.underline(),
|
||||||
"bd" | "black_dimmed" => Color::Black.dimmed(),
|
"ui" | "blue_italic" => Color::Blue.italic(),
|
||||||
"br" | "black_reverse" => Color::Black.reverse(),
|
"ud" | "blue_dimmed" => Color::Blue.dimmed(),
|
||||||
"bbl" | "black_blink" => Color::Black.blink(),
|
"ur" | "blue_reverse" => Color::Blue.reverse(),
|
||||||
"bst" | "black_strike" => Color::Black.strikethrough(),
|
"ubl" | "blue_blink" => Color::Blue.blink(),
|
||||||
"y" | "yellow" => Color::Yellow.normal(),
|
"ust" | "blue_strike" => Color::Blue.strikethrough(),
|
||||||
"yb" | "yellow_bold" => Color::Yellow.bold(),
|
"b" | "black" => Color::Black.normal(),
|
||||||
"yu" | "yellow_underline" => Color::Yellow.underline(),
|
"bb" | "black_bold" => Color::Black.bold(),
|
||||||
"yi" | "yellow_italic" => Color::Yellow.italic(),
|
"bu" | "black_underline" => Color::Black.underline(),
|
||||||
"yd" | "yellow_dimmed" => Color::Yellow.dimmed(),
|
"bi" | "black_italic" => Color::Black.italic(),
|
||||||
"yr" | "yellow_reverse" => Color::Yellow.reverse(),
|
"bd" | "black_dimmed" => Color::Black.dimmed(),
|
||||||
"ybl" | "yellow_blink" => Color::Yellow.blink(),
|
"br" | "black_reverse" => Color::Black.reverse(),
|
||||||
"yst" | "yellow_strike" => Color::Yellow.strikethrough(),
|
"bbl" | "black_blink" => Color::Black.blink(),
|
||||||
"p" | "purple" => Color::Purple.normal(),
|
"bst" | "black_strike" => Color::Black.strikethrough(),
|
||||||
"pb" | "purple_bold" => Color::Purple.bold(),
|
"y" | "yellow" => Color::Yellow.normal(),
|
||||||
"pu" | "purple_underline" => Color::Purple.underline(),
|
"yb" | "yellow_bold" => Color::Yellow.bold(),
|
||||||
"pi" | "purple_italic" => Color::Purple.italic(),
|
"yu" | "yellow_underline" => Color::Yellow.underline(),
|
||||||
"pd" | "purple_dimmed" => Color::Purple.dimmed(),
|
"yi" | "yellow_italic" => Color::Yellow.italic(),
|
||||||
"pr" | "purple_reverse" => Color::Purple.reverse(),
|
"yd" | "yellow_dimmed" => Color::Yellow.dimmed(),
|
||||||
"pbl" | "purple_blink" => Color::Purple.blink(),
|
"yr" | "yellow_reverse" => Color::Yellow.reverse(),
|
||||||
"pst" | "purple_strike" => Color::Purple.strikethrough(),
|
"ybl" | "yellow_blink" => Color::Yellow.blink(),
|
||||||
"c" | "cyan" => Color::Cyan.normal(),
|
"yst" | "yellow_strike" => Color::Yellow.strikethrough(),
|
||||||
"cb" | "cyan_bold" => Color::Cyan.bold(),
|
"p" | "purple" => Color::Purple.normal(),
|
||||||
"cu" | "cyan_underline" => Color::Cyan.underline(),
|
"pb" | "purple_bold" => Color::Purple.bold(),
|
||||||
"ci" | "cyan_italic" => Color::Cyan.italic(),
|
"pu" | "purple_underline" => Color::Purple.underline(),
|
||||||
"cd" | "cyan_dimmed" => Color::Cyan.dimmed(),
|
"pi" | "purple_italic" => Color::Purple.italic(),
|
||||||
"cr" | "cyan_reverse" => Color::Cyan.reverse(),
|
"pd" | "purple_dimmed" => Color::Purple.dimmed(),
|
||||||
"cbl" | "cyan_blink" => Color::Cyan.blink(),
|
"pr" | "purple_reverse" => Color::Purple.reverse(),
|
||||||
"cst" | "cyan_strike" => Color::Cyan.strikethrough(),
|
"pbl" | "purple_blink" => Color::Purple.blink(),
|
||||||
"w" | "white" => Color::White.normal(),
|
"pst" | "purple_strike" => Color::Purple.strikethrough(),
|
||||||
"wb" | "white_bold" => Color::White.bold(),
|
"c" | "cyan" => Color::Cyan.normal(),
|
||||||
"wu" | "white_underline" => Color::White.underline(),
|
"cb" | "cyan_bold" => Color::Cyan.bold(),
|
||||||
"wi" | "white_italic" => Color::White.italic(),
|
"cu" | "cyan_underline" => Color::Cyan.underline(),
|
||||||
"wd" | "white_dimmed" => Color::White.dimmed(),
|
"ci" | "cyan_italic" => Color::Cyan.italic(),
|
||||||
"wr" | "white_reverse" => Color::White.reverse(),
|
"cd" | "cyan_dimmed" => Color::Cyan.dimmed(),
|
||||||
"wbl" | "white_blink" => Color::White.blink(),
|
"cr" | "cyan_reverse" => Color::Cyan.reverse(),
|
||||||
"wst" | "white_strike" => Color::White.strikethrough(),
|
"cbl" | "cyan_blink" => Color::Cyan.blink(),
|
||||||
_ => Color::White.normal(),
|
"cst" | "cyan_strike" => Color::Cyan.strikethrough(),
|
||||||
|
"w" | "white" => Color::White.normal(),
|
||||||
|
"wb" | "white_bold" => Color::White.bold(),
|
||||||
|
"wu" | "white_underline" => Color::White.underline(),
|
||||||
|
"wi" | "white_italic" => Color::White.italic(),
|
||||||
|
"wd" | "white_dimmed" => Color::White.dimmed(),
|
||||||
|
"wr" | "white_reverse" => Color::White.reverse(),
|
||||||
|
"wbl" | "white_blink" => Color::White.blink(),
|
||||||
|
"wst" | "white_strike" => Color::White.strikethrough(),
|
||||||
|
_ => Color::White.normal(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn color_from_hex(hex_color: &str) -> std::result::Result<Option<Color>, std::num::ParseIntError> {
|
||||||
|
// right now we only allow hex colors with hashtag and 6 characters
|
||||||
|
let trimmed = hex_color.trim_matches('#');
|
||||||
|
if trimmed.len() != 6 {
|
||||||
|
Ok(None)
|
||||||
|
} else {
|
||||||
|
// make a nu_ansi_term::Color::Rgb color by converting hex to decimal
|
||||||
|
Ok(Some(Color::Rgb(
|
||||||
|
u8::from_str_radix(&trimmed[..2], 16)?,
|
||||||
|
u8::from_str_radix(&trimmed[2..4], 16)?,
|
||||||
|
u8::from_str_radix(&trimmed[4..6], 16)?,
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user