1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
use std::fmt::Display; /// Enum with the different attributes to style your test. /// /// There are few things to note: /// - Not all attributes are supported, some of them are only supported on Windows some only on Unix, /// and some are only very rarely supported. /// - I got those attributes, descriptions, supportability from here: https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters /// - Take note of the fact that when running your program cross-platform that some attributes might not work because of their support. /// - When an attribute is not supported nothing will happen with the terminal state. /// /// # Example /// You can use an attribute in a write statement to apply the attribute to the terminal output. /// /// ```rust /// println!( /// "{} Underlined {} No Underline", /// Attribute::Underlined, /// Attribute::NoUnderline /// ); /// ``` /// /// You can also call attribute functions on a `&'static str`: /// ```rust /// use crossterm(_style)::Colorizer; /// /// println!("{}", style("Bold text").bold()); /// println!("{}", style("Underlined text").underlined()); /// println!("{}", style("Negative text").negative()); /// ``` #[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)] pub enum Attribute { /// All attributes off /// [info]: This will reset all current set attributes. /// [Supportability]: Windows, UNIX. Reset = 0, /// Increased Intensity /// [info]: This will increase the text sensitivity also known as bold. /// [Supportability]: Windows, UNIX. Bold = 1, /// Decreased Intensity /// [info]: This will decrease the text sensitivity also known as bold. /// [Supportability]: Windows, UNIX. Dim = 2, /// Italic Text /// [info]: This will make the text italic. /// [Supportability]: Not widely supported, sometimes treated as inverse. Italic = 3, /// This will draw a line under the text. /// [info]: An line under a word, especially in order to show its importance. /// [Supportability]: Windows, UNIX Underlined = 4, /// Slow Blinking Text /// [info]: Blink Less than 150 per minute. /// [Supportability]: UNIX SlowBlink = 5, /// Slow Blinking Text /// [info]: MS-DOS ANSI.SYS; 150+ per minute; /// [Supportability]: Not widely supported RapidBlink = 6, /// Swap foreground and background colors /// [info]: swap foreground and background colors /// [Supportability]: Windows, UNIX Reverse = 7, /// Hide text /// [info]: /// - This will make the text hidden. /// - Also known as 'Conceal' /// [Supportability]: Windows, UNIX Hidden = 8, /// Cross-out text /// [info]: Characters legible, but marked for deletion. /// [Supportability]: UNIX CrossedOut = 9, /// The Fraktur is a typeface belonging to the group of Gothic typefaces. /// [info]: https://nl.wikipedia.org/wiki/Fraktur /// [Supportability]: Rarely supported Fraktur = 20, /// This will turn off the bold attribute. /// [info]: /// - Double-underline per ECMA-48. /// - WikiPedia: https://en.wikipedia.org/wiki/Talk:ANSI_escape_code#SGR_21%E2%80%94%60Bold_off%60_not_widely_supported /// - Opposite of `Bold`(1) /// [Supportability]: not widely supported NoBold = 21, /// Normal color or intensity /// Neither bold nor faint NormalIntensity = 22, /// This will turn off the italic attribute. /// [info]: /// - Not italic, not Fraktur /// - Opposite of `Italic`(3) /// [Supportability]: Windows, UNIX NoItalic = 23, /// This will turn off the underline attribute. /// [info]: /// - Not singly or doubly underlined will be turned off. /// - Opposite of `Underlined.`(4) /// [Supportability]: Windows, UNIX NoUnderline = 24, /// This will turn off the blinking attribute /// [info]: Opposite of `Slow and Rapid blink.`(5,6) /// [Supportability]: Unknown NoBlink = 25, /// This will turn off the reverse attribute. /// [info]: Opposite of `Reverse`(7) /// [Supportability]: Windows, unknown NoInverse = 27, /// This will make the text visible. /// [info]: Opposite of `Hidden`(8) /// [Supportability]: Unknown NoHidden = 28, /// This will turn off the crossed out attribute. /// [info]: Opposite of `CrossedOut`(9) /// [Supportability]: Not widely supported NotCrossedOut = 29, /// Framed text. /// [Supportability]: Not widely supported Framed = 51, /// This will turn on the encircled attribute. Encircled = 52, /// This will draw a line at the top of the text. /// [info]: Implementation defined (according to standard) /// [Supportability]: Unknown OverLined = 53, /// This will turn off the framed or encircled attribute. NotFramedOrEncircled = 54, /// This will turn off the overLined attribute. /// [info]: Opposite of `OverLined`(7) /// [Supportability]: Windows, unknown NotOverLined = 55, #[doc(hidden)] __Nonexhaustive, } impl Display for Attribute { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> { write!(f, "{}", format!(csi!("{}m"), *self as i16))?; Ok(()) } }