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 { |
79 | 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 | |