Skip to main content

Color

Enum Color 

Source
pub enum Color {
Show 19 variants Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White, Rgb(u8, u8, u8), Indexed(u8),
}
Expand description

ANSI Color

All colors from the ANSI color table are supported (though some names are not exactly the same).

Color NameColorForegroundBackground
blackColor::Black3040
redColor::Red3141
greenColor::Green3242
yellowColor::Yellow3343
blueColor::Blue3444
magentaColor::Magenta3545
cyanColor::Cyan3646
gray*Color::Gray3747
darkgray*Color::DarkGray90100
lightredColor::LightRed91101
lightgreenColor::LightGreen92102
lightyellowColor::LightYellow93103
lightblueColor::LightBlue94104
lightmagentaColor::LightMagenta95105
lightcyanColor::LightCyan96106
white*Color::White97107
  • gray is sometimes called white - this is not supported as we use white for bright white
  • gray is sometimes called silver - this is supported
  • darkgray is sometimes called light black or bright black (both are supported)
  • white is sometimes called light white or bright white (both are supported)
  • we support bright and light prefixes for all colors
  • we support - and _ and as separators for all colors
  • we support both gray and grey spellings

From<Color> for Style is implemented by creating a style with the foreground color set to the given color. This allows you to use colors anywhere that accepts Into<Style>.

§Example

use std::str::FromStr;

use ratatui_core::style::Color;

assert_eq!(Color::from_str("red"), Ok(Color::Red));
assert_eq!("red".parse(), Ok(Color::Red));
assert_eq!("lightred".parse(), Ok(Color::LightRed));
assert_eq!("light red".parse(), Ok(Color::LightRed));
assert_eq!("light-red".parse(), Ok(Color::LightRed));
assert_eq!("light_red".parse(), Ok(Color::LightRed));
assert_eq!("lightRed".parse(), Ok(Color::LightRed));
assert_eq!("bright red".parse(), Ok(Color::LightRed));
assert_eq!("bright-red".parse(), Ok(Color::LightRed));
assert_eq!("silver".parse(), Ok(Color::Gray));
assert_eq!("dark-grey".parse(), Ok(Color::DarkGray));
assert_eq!("dark gray".parse(), Ok(Color::DarkGray));
assert_eq!("light-black".parse(), Ok(Color::DarkGray));
assert_eq!("white".parse(), Ok(Color::White));
assert_eq!("bright white".parse(), Ok(Color::White));

Variants§

§

Reset

Resets the foreground or background color

§

Black

ANSI Color: Black. Foreground: 30, Background: 40

§

Red

ANSI Color: Red. Foreground: 31, Background: 41

§

Green

ANSI Color: Green. Foreground: 32, Background: 42

§

Yellow

ANSI Color: Yellow. Foreground: 33, Background: 43

§

Blue

ANSI Color: Blue. Foreground: 34, Background: 44

§

Magenta

ANSI Color: Magenta. Foreground: 35, Background: 45

§

Cyan

ANSI Color: Cyan. Foreground: 36, Background: 46

§

Gray

ANSI Color: White. Foreground: 37, Background: 47

Note that this is sometimes called silver or white but we use white for bright white

§

DarkGray

ANSI Color: Bright Black. Foreground: 90, Background: 100

Note that this is sometimes called light black or bright black but we use dark gray

§

LightRed

ANSI Color: Bright Red. Foreground: 91, Background: 101

§

LightGreen

ANSI Color: Bright Green. Foreground: 92, Background: 102

§

LightYellow

ANSI Color: Bright Yellow. Foreground: 93, Background: 103

§

LightBlue

ANSI Color: Bright Blue. Foreground: 94, Background: 104

§

LightMagenta

ANSI Color: Bright Magenta. Foreground: 95, Background: 105

§

LightCyan

ANSI Color: Bright Cyan. Foreground: 96, Background: 106

§

White

ANSI Color: Bright White. Foreground: 97, Background: 107 Sometimes called bright white or light white in some terminals

§

Rgb(u8, u8, u8)

An RGB color.

Note that only terminals that support 24-bit true color will display this correctly. Notably versions of Windows Terminal prior to Windows 10 and macOS Terminal.app do not support this.

If the terminal does not support true color, code using the TermwizBackend will fallback to the default text color. Crossterm and Termion do not have this capability and the display will be unpredictable (e.g. Terminal.app may display glitched blinking text). See https://github.com/ratatui/ratatui/issues/475 for an example of this problem.

See also: https://en.wikipedia.org/wiki/ANSI_escape_code#24-bit

§

Indexed(u8)

Implementations§

Source§

impl Color

Source

pub const fn from_u32(u: u32) -> Color

Convert a u32 to a Color

The u32 should be in the format 0x00RRGGBB.

Trait Implementations§

Source§

impl Clone for Color

Source§

fn clone(&self) -> Color

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Color

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Color

Source§

fn default() -> Color

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Color

Available on crate feature serde only.
Source§

fn deserialize<D>( deserializer: D, ) -> Result<Color, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

This is used to deserialize a value into Color via serde.

This implementation uses the FromStr trait to deserialize strings, so named colours, RGB, and indexed values are able to be deserialized. In addition, values that were produced by the the older serialization implementation of Color are also able to be deserialized.

Prior to v0.26.0, Ratatui would be serialized using a map for indexed and RGB values, for examples in json {"Indexed": 10} and {"Rgb": [255, 0, 255]} respectively. Now they are serialized using the string representation of the index and the RGB hex value, for example in json it would now be "10" and "#FF00FF" respectively.

See the Color documentation for more information on color names.

§Examples
use std::str::FromStr;

use ratatui_core::style::Color;

#[derive(Debug, serde::Deserialize)]
struct Theme {
    color: Color,
}

let theme: Theme = serde_json::from_str(r#"{"color": "bright-white"}"#)?;
assert_eq!(theme.color, Color::White);

let theme: Theme = serde_json::from_str(r##"{"color": "#00FF00"}"##)?;
assert_eq!(theme.color, Color::Rgb(0, 255, 0));

let theme: Theme = serde_json::from_str(r#"{"color": "42"}"#)?;
assert_eq!(theme.color, Color::Indexed(42));

let err = serde_json::from_str::<Theme>(r#"{"color": "invalid"}"#).unwrap_err();
assert!(err.is_data());
assert_eq!(
    err.to_string(),
    "Failed to parse Colors at line 1 column 20"
);

// Deserializing from the previous serialization implementation
let theme: Theme = serde_json::from_str(r#"{"color": {"Rgb":[255,0,255]}}"#)?;
assert_eq!(theme.color, Color::Rgb(255, 0, 255));

let theme: Theme = serde_json::from_str(r#"{"color": {"Indexed":10}}"#)?;
assert_eq!(theme.color, Color::Indexed(10));
Source§

impl Display for Color

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl From<[u8; 3]> for Color

Source§

fn from(_: [u8; 3]) -> Color

Converts an array of 3 u8 values to a Color::Rgb instance.

Source§

impl From<[u8; 4]> for Color

Source§

fn from(_: [u8; 4]) -> Color

Converts an array of 4 u8 values to a Color::Rgb instance (ignoring the alpha value).

Source§

impl From<(u8, u8, u8)> for Color

Source§

fn from(_: (u8, u8, u8)) -> Color

Converts a tuple of 3 u8 values to a Color::Rgb instance.

Source§

impl From<(u8, u8, u8, u8)> for Color

Source§

fn from(_: (u8, u8, u8, u8)) -> Color

Converts a tuple of 4 u8 values to a Color::Rgb instance (ignoring the alpha value).

Source§

impl From<Color> for Style

Source§

fn from(color: Color) -> Style

Creates a new Style with the given foreground color.

To specify a foreground and background color, use the from((fg, bg)) constructor.

§Example
use ratatui_core::style::{Color, Style};

let style = Style::from(Color::Red);
Source§

impl FromCrossterm<Color> for Color

Source§

fn from_crossterm(value: Color) -> Color

Converts the crossterm type to a ratatui type.
Source§

impl FromStr for Color

Converts a string representation to a Color instance.

The from_str function attempts to parse the given string and convert it to the corresponding Color variant. It supports named colors, RGB values, and indexed colors. If the string cannot be parsed, a ParseColorError is returned.

See the Color documentation for more information on the supported color names.

§Examples

use std::str::FromStr;

use ratatui_core::style::Color;

let color: Color = Color::from_str("blue").unwrap();
assert_eq!(color, Color::Blue);

let color: Color = Color::from_str("#FF0000").unwrap();
assert_eq!(color, Color::Rgb(255, 0, 0));

let color: Color = Color::from_str("10").unwrap();
assert_eq!(color, Color::Indexed(10));

let color: Result<Color, _> = Color::from_str("invalid_color");
assert!(color.is_err());
Source§

type Err = ParseColorError

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Color, <Color as FromStr>::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for Color

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl IntoCrossterm<Color> for Color

Source§

fn into_crossterm(self) -> Color

Converts the ratatui type to a crossterm type.
Source§

impl PartialEq for Color

Source§

fn eq(&self, other: &Color) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Color

Available on crate feature serde only.
Source§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

This utilises the fmt::Display implementation for serialization.

Source§

impl Copy for Color

Source§

impl Eq for Color

Source§

impl StructuralPartialEq for Color

Auto Trait Implementations§

§

impl Freeze for Color

§

impl RefUnwindSafe for Color

§

impl Send for Color

§

impl Sync for Color

§

impl Unpin for Color

§

impl UnsafeUnpin for Color

§

impl UnwindSafe for Color

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> MaybeExt for T

Source§

fn take_from(&mut self, maybe: Option<T>)

Merge from maybe by taking.
Source§

fn clone_from(&mut self, maybe: &Option<T>)
where T: Clone,

Merge from maybe by cloning.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToCompactString for T
where T: Display,

Source§

impl<T> ToLine for T
where T: Display,

Source§

fn to_line(&self) -> Line<'_>

Converts the value to a Line.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToSpan for T
where T: Display,

Source§

fn to_span(&self) -> Span<'_>

Converts the value to a Span.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> ToText for T
where T: Display,

Source§

fn to_text(&self) -> Text<'_>

Converts the value to a Text.
Source§

impl<T> TransformExt for T

Source§

fn transform<Q>(self, transform: impl FnOnce(T) -> Q) -> Q

Source§

fn transform_if(self, condition: bool, transform: impl FnOnce(T) -> T) -> T

Example Read more
Source§

fn modify<Q>(self, modify: impl FnOnce(&mut T) -> Q) -> T

Source§

fn modify_if<Q>(self, condition: bool, modify: impl FnOnce(&mut T) -> Q) -> T

Example Read more
Source§

fn cmp_exch<'a, E>(&'a mut self, expected: E, new: T) -> bool
where &'a mut T: PartialEq<E>,

Example Read more
Source§

fn dbg(self) -> T
where T: Debug,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ActionExt for T
where T: Debug + Clone + PartialEq + SSS,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> SSS for T
where T: Send + Sync + 'static,

Source§

impl<T> Selection for T