1 use std::fmt; 2 3 sequence!( 4 /// Resets all attributes. 5 /// 6 /// This sequence resets all attributes previously set by the: 7 /// 8 /// * [`SetAttribute`](struct.SetAttribute.html) 9 /// * [`SetForegroundColor`](struct.SetBackgroundColor.html) 10 /// * [`SetBackgroundColor`](struct.SetForegroundColor.html) 11 /// 12 /// # Examples 13 /// 14 /// ```no_run 15 /// use std::io::{stdout, Write}; 16 /// use anes::ResetAttributes; 17 /// 18 /// let mut stdout = stdout(); 19 /// write!(stdout, "{}", ResetAttributes); 20 /// ``` 21 struct ResetAttributes => sgr!("0") 22 ); 23 24 /// A display attribute. 25 /// 26 /// This is **NOT** a full ANSI sequence. `Attribute` must be used along with 27 /// the [`SetAttribute`](struct.SetAttribute.html). 28 /// 29 /// # Examples 30 /// 31 /// ```no_run 32 /// use std::io::{stdout, Write}; 33 /// use anes::{Attribute, SetAttribute}; 34 /// 35 /// let mut stdout = stdout(); 36 /// write!(stdout, "{}Bold text", SetAttribute(Attribute::Bold)); 37 /// ``` 38 #[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] 39 pub enum Attribute { 40 /// Bold (increased) intensity. 41 Bold = 1, 42 /// Faint (decreased) intensity. 43 Faint = 2, 44 /// Normal intensity (turns off `Bold` and/or `Faint`). 45 Normal = 22, 46 47 /// Italic. 48 Italic = 3, 49 /// Turns off `Italic`. 50 ItalicOff = 23, 51 52 /// Underlined text. 53 Underline = 4, 54 /// Turns off `Underline`. 55 UnderlineOff = 24, 56 57 /// Blinking text. 58 Blink = 5, 59 /// Turns off blinking text (`Blink`). 60 BlinkOff = 25, 61 62 /// Reverse foreground & background colors. 63 Reverse = 7, 64 /// Turns off `Reverse`. 65 ReverseOff = 27, 66 67 /// Concealed (hidden). 68 Conceal = 8, 69 /// Turns off `Conceal`. 70 ConcealOff = 28, 71 72 /// Crossed. 73 Crossed = 9, 74 /// Turns off `Crossed`. 75 CrossedOff = 29, 76 } 77 78 impl fmt::Display for Attribute { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result79 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 80 write!(f, "{}", *self as i32) 81 } 82 } 83 84 sequence!( 85 /// Sets the display attribute. 86 /// 87 /// See the [`Attribute`](enum.Attribute.html) enum for a list of attributes you can (un)set. 88 /// 89 /// The [`ResetAttributes`](struct.ResetAttributes.html) sequence can be used to turn off all 90 /// attributes. 91 /// 92 /// # Examples 93 /// 94 /// ```no_run 95 /// use std::io::{stdout, Write}; 96 /// use anes::{Attribute, SetAttribute}; 97 /// 98 /// let mut stdout = stdout(); 99 /// write!(stdout, "{}Blinking text", SetAttribute(Attribute::Blink)); 100 /// ``` 101 struct SetAttribute(Attribute) => 102 |this, f| write!(f, sgr!("{}"), this.0) 103 ); 104 105 #[cfg(test)] 106 test_sequences!( 107 set_attribute( 108 SetAttribute(Attribute::Bold) => "\x1B[1m", 109 SetAttribute(Attribute::Faint) => "\x1B[2m", 110 SetAttribute(Attribute::Normal) => "\x1B[22m", 111 112 SetAttribute(Attribute::Italic) => "\x1B[3m", 113 SetAttribute(Attribute::ItalicOff) => "\x1B[23m", 114 115 SetAttribute(Attribute::Underline) => "\x1B[4m", 116 SetAttribute(Attribute::UnderlineOff) => "\x1B[24m", 117 118 SetAttribute(Attribute::Blink) => "\x1B[5m", 119 SetAttribute(Attribute::BlinkOff) => "\x1B[25m", 120 121 SetAttribute(Attribute::Reverse) => "\x1B[7m", 122 SetAttribute(Attribute::ReverseOff) => "\x1B[27m", 123 124 SetAttribute(Attribute::Conceal) => "\x1B[8m", 125 SetAttribute(Attribute::ConcealOff) => "\x1B[28m", 126 127 SetAttribute(Attribute::Crossed) => "\x1B[9m", 128 SetAttribute(Attribute::CrossedOff) => "\x1B[29m", 129 ), 130 reset_attributes( 131 ResetAttributes => "\x1B[0m", 132 ) 133 ); 134