diff --git a/crossterm_style/src/ansi_color.rs b/crossterm_style/src/ansi_color.rs index eb6cc3f..c3d65f3 100644 --- a/crossterm_style/src/ansi_color.rs +++ b/crossterm_style/src/ansi_color.rs @@ -41,7 +41,7 @@ impl ITerminalColor for AnsiColor { fn color_value(&self, colored: Colored) -> String { let mut ansi_value = String::new(); - let mut color = Color::White; + let color; match colored { Colored::Fg(new_color) => { @@ -58,6 +58,7 @@ impl ITerminalColor for AnsiColor { let color_val = match color { Color::Black => "5;0", + Color::DarkGrey => "5;8", Color::Red => "5;9", Color::DarkRed => "5;1", Color::Green => "5;10", @@ -70,8 +71,8 @@ impl ITerminalColor for AnsiColor { Color::DarkMagenta => "5;5", Color::Cyan => "5;14", Color::DarkCyan => "5;6", - Color::Grey => "5;15", - Color::White => "5;7", + Color::White => "5;15", + Color::Grey => "5;7", Color::Rgb { r, g, b } => { rgb_val = format!("2;{};{};{}", r, g, b); diff --git a/crossterm_style/src/enums/color.rs b/crossterm_style/src/enums/color.rs index dad522a..51dcdb0 100644 --- a/crossterm_style/src/enums/color.rs +++ b/crossterm_style/src/enums/color.rs @@ -5,6 +5,7 @@ use std::str::FromStr; #[derive(Debug, Copy, Clone)] pub enum Color { Black, + DarkGrey, Red, DarkRed, @@ -24,8 +25,8 @@ pub enum Color { Cyan, DarkCyan, - Grey, White, + Grey, /// Color representing RGB-colors; /// r = red /// g = green @@ -61,6 +62,7 @@ impl FromStr for Color { match src.as_ref() { "black" => Ok(Color::Black), + "dark_grey" => Ok(Color::DarkGrey), "red" => Ok(Color::Red), "dark_red" => Ok(Color::DarkRed), "green" => Ok(Color::Green), @@ -73,8 +75,8 @@ impl FromStr for Color { "dark_magenta" => Ok(Color::DarkMagenta), "cyan" => Ok(Color::Cyan), "dark_cyan" => Ok(Color::DarkCyan), - "grey" => Ok(Color::Grey), "white" => Ok(Color::White), + "grey" => Ok(Color::Grey), _ => Ok(Color::White), } } diff --git a/crossterm_style/src/lib.rs b/crossterm_style/src/lib.rs index 31b418b..c8cd81d 100644 --- a/crossterm_style/src/lib.rs +++ b/crossterm_style/src/lib.rs @@ -80,6 +80,7 @@ where impl Colorize<&'static str> for &'static str { // foreground colors def_str_color!(fg_color: black => Color::Black); + def_str_color!(fg_color: dark_grey => Color::DarkGrey); def_str_color!(fg_color: red => Color::Red); def_str_color!(fg_color: dark_red => Color::DarkRed); def_str_color!(fg_color: green => Color::Green); @@ -97,6 +98,7 @@ impl Colorize<&'static str> for &'static str { // background colors def_str_color!(bg_color: on_black => Color::Black); + def_str_color!(bg_color: on_dark_grey => Color::DarkGrey); def_str_color!(bg_color: on_red => Color::Red); def_str_color!(bg_color: on_dark_red => Color::DarkRed); def_str_color!(bg_color: on_green => Color::Green); diff --git a/crossterm_style/src/styledobject.rs b/crossterm_style/src/styledobject.rs index cab8262..fb549d8 100644 --- a/crossterm_style/src/styledobject.rs +++ b/crossterm_style/src/styledobject.rs @@ -83,6 +83,7 @@ impl Display for StyledObject { impl Colorize for StyledObject { // foreground colors def_color!(fg_color: black => Color::Black); + def_color!(fg_color: dark_grey => Color::DarkGrey); def_color!(fg_color: red => Color::Red); def_color!(fg_color: dark_red => Color::DarkRed); def_color!(fg_color: green => Color::Green); @@ -100,6 +101,7 @@ impl Colorize for StyledObject { // background colors def_color!(bg_color: on_black => Color::Black); + def_color!(bg_color: on_dark_grey => Color::DarkGrey); def_color!(bg_color: on_red => Color::Red); def_color!(bg_color: on_dark_red => Color::DarkRed); def_color!(bg_color: on_green => Color::Green); diff --git a/crossterm_style/src/traits.rs b/crossterm_style/src/traits.rs index 94fac65..89211a8 100644 --- a/crossterm_style/src/traits.rs +++ b/crossterm_style/src/traits.rs @@ -13,6 +13,7 @@ use std::fmt::Display; /// ``` pub trait Colorize { fn black(self) -> StyledObject; + fn dark_grey(self) -> StyledObject; fn red(self) -> StyledObject; fn dark_red(self) -> StyledObject; fn green(self) -> StyledObject; @@ -29,6 +30,7 @@ pub trait Colorize { fn grey(self) -> StyledObject; fn on_black(self) -> StyledObject; + fn on_dark_grey(self) -> StyledObject; fn on_red(self) -> StyledObject; fn on_dark_red(self) -> StyledObject; fn on_green(self) -> StyledObject; diff --git a/crossterm_style/src/winapi_color.rs b/crossterm_style/src/winapi_color.rs index e6f4f24..6d34a99 100644 --- a/crossterm_style/src/winapi_color.rs +++ b/crossterm_style/src/winapi_color.rs @@ -99,6 +99,7 @@ impl ITerminalColor for WinApiColor { Colored::Fg(color) => { winapi_color = match color { Color::Black => 0, + Color::DarkGrey => fg_intensity, Color::Red => fg_intensity | fg_red, Color::DarkRed => fg_red, Color::Green => fg_intensity | fg_green, @@ -111,8 +112,8 @@ impl ITerminalColor for WinApiColor { Color::DarkMagenta => fg_red | fg_blue, Color::Cyan => fg_intensity | fg_green | fg_blue, Color::DarkCyan => fg_green | fg_blue, - Color::Grey => fg_intensity, - Color::White => fg_intensity | fg_red | fg_green | fg_blue, + Color::White => fg_red | fg_green | fg_blue, + Color::Grey => fg_intensity | fg_red | fg_green | fg_blue, /* WinApi will be used for systems that do not support ANSI, those are windows version less then 10. RGB and 255 (AnsiBValue) colors are not supported in that case.*/ Color::Rgb { r: _, g: _, b: _ } => 0, @@ -122,6 +123,7 @@ impl ITerminalColor for WinApiColor { Colored::Bg(color) => { winapi_color = match color { Color::Black => 0, + Color::DarkGrey => bg_intensity, Color::Red => bg_intensity | bg_red, Color::DarkRed => bg_red, Color::Green => bg_intensity | bg_green, @@ -134,8 +136,8 @@ impl ITerminalColor for WinApiColor { Color::DarkMagenta => bg_red | bg_blue, Color::Cyan => bg_intensity | bg_green | bg_blue, Color::DarkCyan => bg_green | bg_blue, - Color::Grey => bg_intensity, Color::White => bg_intensity | bg_red | bg_green | bg_blue, + Color::Grey => bg_red | bg_green | bg_blue, /* WinApi will be used for systems that do not support ANSI, those are windows version less then 10. RGB and 255 (AnsiBValue) colors are not supported in that case.*/ Color::Rgb { r: _, g: _, b: _ } => 0, diff --git a/examples/style.rs b/examples/style.rs index a9f2c46..fa3503e 100644 --- a/examples/style.rs +++ b/examples/style.rs @@ -25,6 +25,11 @@ pub fn print_all_foreground_colors_with_enum() { Colored::Fg(Color::Black), Attribute::Reset ); + println!( + "DarkGrey : \t\t {} ■ {}\n", + Colored::Fg(Color::DarkGrey), + Attribute::Reset + ); println!( "Red : \t\t {} ■ {}\n", Colored::Fg(Color::Red), @@ -117,6 +122,11 @@ pub fn print_all_foreground_colors_with_method() { "■".black(), Attribute::Reset ); + println!( + "DarkGrey : \t\t {} {}\n", + "■".dark_grey(), + Attribute::Reset + ); println!("Red : \t\t {} {}\n", "■".red(), Attribute::Reset); println!( "DarkRed : \t\t {} {}\n", @@ -180,6 +190,11 @@ pub fn print_all_background_colors_with_enum() { Colored::Bg(Color::Black), Attribute::Reset ); + println!( + "DarkGrey : \t\t {} ■ {}\n", + Colored::Bg(Color::DarkGrey), + Attribute::Reset + ); println!( "Red : \t\t {} ■ {}\n", Colored::Bg(Color::Red), @@ -272,6 +287,11 @@ pub fn print_all_background_colors_with_method() { "■".on_black(), Attribute::Reset ); + println!( + "DarkGrey : \t\t {} {}\n", + "■".on_dark_grey(), + Attribute::Reset + ); println!( "Red : \t\t {} {}\n", "■".on_red(),