use std::collections::HashMap; use ansi_term::{Style, Colour}; /// Maps file extensions to ANSI colors / styles. pub type ExtensionStyles = HashMap; /// Maps filenames to ANSI colors / styles. pub type FilenameStyles = HashMap; const LS_CODES: &'static [&'static str] = &["no", "no", "fi", "rs", "di", "ln", "ln", "ln", "or", "mi", "pi", "pi", "so", "bd", "bd", "cd", "cd", "do", "ex", "lc", "lc", "rc", "rc", "ec", "ec", "su", "su", "sg", "sg", "st", "ow", "ow", "tw", "tw", "ca", "mh", "cl"]; #[derive(Debug, PartialEq)] pub struct LsColors { pub directory: Style, pub symlink: Style, pub extensions: ExtensionStyles, pub filenames: FilenameStyles, } impl LsColors { /// Get a default LsColors structure. pub fn default() -> LsColors { LsColors { directory: Colour::Blue.bold(), symlink: Colour::Cyan.normal(), extensions: HashMap::new(), filenames: HashMap::new() } } fn parse_decoration(code: &str) -> Option Style> { match code { "0" | "00" => Some(Colour::normal), "1" | "01" => Some(Colour::bold), "3" | "03" => Some(Colour::italic), "4" | "04" => Some(Colour::underline), _ => None } } /// Parse ANSI escape sequences like `38;5;10;1`. fn parse_style(code: &str) -> Option