use ansi_term::Style; use ansi_term::Colour::{Red, Green, Yellow, Blue, Cyan, Purple, Fixed}; #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Colours { pub filetypes: FileTypes, pub perms: Permissions, pub size: Size, pub users: Users, pub links: Links, pub git: Git, pub punctuation: Style, pub date: Style, pub inode: Style, pub blocks: Style, pub header: Style, pub symlink_path: Style, pub broken_arrow: Style, pub broken_filename: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct FileTypes { pub normal: Style, pub directory: Style, pub symlink: Style, pub special: Style, pub executable: Style, pub image: Style, pub video: Style, pub music: Style, pub lossless: Style, pub crypto: Style, pub document: Style, pub compressed: Style, pub temp: Style, pub immediate: Style, pub compiled: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Permissions { pub user_read: Style, pub user_write: Style, pub user_execute_file: Style, pub user_execute_other: Style, pub group_read: Style, pub group_write: Style, pub group_execute: Style, pub other_read: Style, pub other_write: Style, pub other_execute: Style, pub attribute: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Size { pub numbers: Style, pub unit: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Users { pub user_you: Style, pub user_someone_else: Style, pub group_yours: Style, pub group_not_yours: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Links { pub normal: Style, pub multi_link_file: Style, } #[derive(Clone, Copy, Debug, Default, PartialEq)] pub struct Git { pub new: Style, pub modified: Style, pub deleted: Style, pub renamed: Style, pub typechange: Style, } impl Colours { pub fn plain() -> Colours { Colours::default() } pub fn colourful() -> Colours { Colours { filetypes: FileTypes { normal: Style::default(), directory: Blue.bold(), symlink: Cyan.normal(), special: Yellow.normal(), executable: Green.bold(), image: Fixed(133).normal(), video: Fixed(135).normal(), music: Fixed(92).normal(), lossless: Fixed(93).normal(), crypto: Fixed(109).normal(), document: Fixed(105).normal(), compressed: Red.normal(), temp: Fixed(244).normal(), immediate: Yellow.bold().underline(), compiled: Fixed(137).normal(), }, perms: Permissions { user_read: Yellow.bold(), user_write: Red.bold(), user_execute_file: Green.bold().underline(), user_execute_other: Green.bold(), group_read: Yellow.normal(), group_write: Red.normal(), group_execute: Green.normal(), other_read: Yellow.normal(), other_write: Red.normal(), other_execute: Green.normal(), attribute: Style::default(), }, size: Size { numbers: Green.bold(), unit: Green.normal(), }, users: Users { user_you: Yellow.bold(), user_someone_else: Style::default(), group_yours: Yellow.bold(), group_not_yours: Style::default(), }, links: Links { normal: Red.bold(), multi_link_file: Red.on(Yellow), }, git: Git { new: Green.normal(), modified: Blue.normal(), deleted: Red.normal(), renamed: Yellow.normal(), typechange: Purple.normal(), }, punctuation: Fixed(244).normal(), date: Blue.normal(), inode: Purple.normal(), blocks: Cyan.normal(), header: Style::default().underline(), symlink_path: Cyan.normal(), broken_arrow: Red.normal(), broken_filename: Red.underline() } } }