From 4982457e152132868af0fa676c8baeb5af18a52f Mon Sep 17 00:00:00 2001 From: Asthowen Date: Tue, 14 Jan 2025 18:54:27 +0100 Subject: [PATCH] Add support for arbitrary ANSI color --- CHANGELOG.md | 1 + src/color.rs | 8 ++++++-- src/lib.rs | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 577c8b2..63faf81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Unreleased +- Added methods `ansi_color` and `on_ansi_color` to `Colorize`. # 3.0.0 - **[BREAKING CHANGE]:** Upgrade MSRV to 1.80 and remove the then unnecessary lazy_static dependency. diff --git a/src/color.rs b/src/color.rs index a6db719..163dee4 100644 --- a/src/color.rs +++ b/src/color.rs @@ -1,7 +1,7 @@ use std::{borrow::Cow, cmp, env, str::FromStr}; use Color::{ - Black, Blue, BrightBlack, BrightBlue, BrightCyan, BrightGreen, BrightMagenta, BrightRed, - BrightWhite, BrightYellow, Cyan, Green, Magenta, Red, TrueColor, White, Yellow, + AnsiColor, Black, Blue, BrightBlack, BrightBlue, BrightCyan, BrightGreen, BrightMagenta, + BrightRed, BrightWhite, BrightYellow, Cyan, Green, Magenta, Red, TrueColor, White, Yellow, }; /// The 8 standard colors. #[derive(Clone, Copy, Debug, PartialEq, Eq)] @@ -24,6 +24,7 @@ pub enum Color { BrightCyan, BrightWhite, TrueColor { r: u8, g: u8, b: u8 }, + AnsiColor(u8), } fn truecolor_support() -> bool { @@ -56,6 +57,7 @@ impl Color { self.closest_color_euclidean().to_fg_str() } Self::TrueColor { r, g, b } => format!("38;2;{r};{g};{b}").into(), + Self::AnsiColor(code) => format!("38;5;{code}").into(), } } @@ -82,6 +84,7 @@ impl Color { self.closest_color_euclidean().to_bg_str() } Self::TrueColor { r, g, b } => format!("48;2;{r};{g};{b}").into(), + Self::AnsiColor(code) => format!("48;5;{code}").into(), } } @@ -192,6 +195,7 @@ impl Color { b: 255, }, TrueColor { r, g, b } => TrueColor { r, g, b }, + AnsiColor(color) => AnsiColor(color), } } } diff --git a/src/lib.rs b/src/lib.rs index 51eb8b3..480ca8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -268,6 +268,13 @@ pub trait Colorize { b: color.b, }) } + fn ansi_color(self, color: T) -> ColoredString + where + Self: Sized, + T: Into, + { + self.color(Color::AnsiColor(color.into())) + } fn color>(self, color: S) -> ColoredString; // Background Colors fn on_black(self) -> ColoredString @@ -397,6 +404,13 @@ pub trait Colorize { b: color.b, }) } + fn on_ansi_color(self, color: T) -> ColoredString + where + Self: Sized, + T: Into, + { + self.on_color(Color::AnsiColor(color.into())) + } fn on_color>(self, color: S) -> ColoredString; // Styles fn clear(self) -> ColoredString;