| use std::fmt; |
| |
| sequence!( |
| /// Resets all attributes. |
| /// |
| /// This sequence resets all attributes previously set by the: |
| /// |
| /// * [`SetAttribute`](struct.SetAttribute.html) |
| /// * [`SetForegroundColor`](struct.SetBackgroundColor.html) |
| /// * [`SetBackgroundColor`](struct.SetForegroundColor.html) |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::ResetAttributes; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}", ResetAttributes); |
| /// ``` |
| struct ResetAttributes => sgr!("0") |
| ); |
| |
| /// A display attribute. |
| /// |
| /// This is **NOT** a full ANSI sequence. `Attribute` must be used along with |
| /// the [`SetAttribute`](struct.SetAttribute.html). |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{Attribute, SetAttribute}; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}Bold text", SetAttribute(Attribute::Bold)); |
| /// ``` |
| #[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] |
| pub enum Attribute { |
| /// Bold (increased) intensity. |
| Bold = 1, |
| /// Faint (decreased) intensity. |
| Faint = 2, |
| /// Normal intensity (turns off `Bold` and/or `Faint`). |
| Normal = 22, |
| |
| /// Italic. |
| Italic = 3, |
| /// Turns off `Italic`. |
| ItalicOff = 23, |
| |
| /// Underlined text. |
| Underline = 4, |
| /// Turns off `Underline`. |
| UnderlineOff = 24, |
| |
| /// Blinking text. |
| Blink = 5, |
| /// Turns off blinking text (`Blink`). |
| BlinkOff = 25, |
| |
| /// Reverse foreground & background colors. |
| Reverse = 7, |
| /// Turns off `Reverse`. |
| ReverseOff = 27, |
| |
| /// Concealed (hidden). |
| Conceal = 8, |
| /// Turns off `Conceal`. |
| ConcealOff = 28, |
| |
| /// Crossed. |
| Crossed = 9, |
| /// Turns off `Crossed`. |
| CrossedOff = 29, |
| } |
| |
| impl fmt::Display for Attribute { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| write!(f, "{}", *self as i32) |
| } |
| } |
| |
| sequence!( |
| /// Sets the display attribute. |
| /// |
| /// See the [`Attribute`](enum.Attribute.html) enum for a list of attributes you can (un)set. |
| /// |
| /// The [`ResetAttributes`](struct.ResetAttributes.html) sequence can be used to turn off all |
| /// attributes. |
| /// |
| /// # Examples |
| /// |
| /// ```no_run |
| /// use std::io::{stdout, Write}; |
| /// use anes::{Attribute, SetAttribute}; |
| /// |
| /// let mut stdout = stdout(); |
| /// write!(stdout, "{}Blinking text", SetAttribute(Attribute::Blink)); |
| /// ``` |
| struct SetAttribute(Attribute) => |
| |this, f| write!(f, sgr!("{}"), this.0) |
| ); |
| |
| #[cfg(test)] |
| test_sequences!( |
| set_attribute( |
| SetAttribute(Attribute::Bold) => "\x1B[1m", |
| SetAttribute(Attribute::Faint) => "\x1B[2m", |
| SetAttribute(Attribute::Normal) => "\x1B[22m", |
| |
| SetAttribute(Attribute::Italic) => "\x1B[3m", |
| SetAttribute(Attribute::ItalicOff) => "\x1B[23m", |
| |
| SetAttribute(Attribute::Underline) => "\x1B[4m", |
| SetAttribute(Attribute::UnderlineOff) => "\x1B[24m", |
| |
| SetAttribute(Attribute::Blink) => "\x1B[5m", |
| SetAttribute(Attribute::BlinkOff) => "\x1B[25m", |
| |
| SetAttribute(Attribute::Reverse) => "\x1B[7m", |
| SetAttribute(Attribute::ReverseOff) => "\x1B[27m", |
| |
| SetAttribute(Attribute::Conceal) => "\x1B[8m", |
| SetAttribute(Attribute::ConcealOff) => "\x1B[28m", |
| |
| SetAttribute(Attribute::Crossed) => "\x1B[9m", |
| SetAttribute(Attribute::CrossedOff) => "\x1B[29m", |
| ), |
| reset_attributes( |
| ResetAttributes => "\x1B[0m", |
| ) |
| ); |