| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- use ansiterm::Style;
- use crate::theme::lsc::Pair;
- #[derive(Debug, Default, PartialEq)]
- pub struct UiStyles {
- pub colourful: bool,
- pub filekinds: FileKinds,
- pub perms: Permissions,
- pub size: Size,
- pub users: Users,
- pub links: Links,
- pub git: Git,
- pub security_context: SecurityContext,
- pub punctuation: Style,
- pub date: Style,
- pub inode: Style,
- pub blocks: Style,
- pub header: Style,
- pub octal: Style,
- pub symlink_path: Style,
- pub control_char: Style,
- pub broken_symlink: Style,
- pub broken_path_overlay: Style,
- }
- #[derive(Clone, Copy, Debug, Default, PartialEq)]
- pub struct FileKinds {
- pub normal: Style,
- pub directory: Style,
- pub symlink: Style,
- pub pipe: Style,
- pub block_device: Style,
- pub char_device: Style,
- pub socket: Style,
- pub special: Style,
- pub executable: 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 special_user_file: Style,
- pub special_other: Style,
- pub attribute: Style,
- }
- #[derive(Clone, Copy, Debug, Default, PartialEq)]
- pub struct Size {
- pub major: Style,
- pub minor: Style,
- pub number_byte: Style,
- pub number_kilo: Style,
- pub number_mega: Style,
- pub number_giga: Style,
- pub number_huge: Style,
- pub unit_byte: Style,
- pub unit_kilo: Style,
- pub unit_mega: Style,
- pub unit_giga: Style,
- pub unit_huge: 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,
- pub ignored: Style,
- pub conflicted: Style,
- }
- #[derive(Clone, Copy, Debug, Default, PartialEq)]
- pub struct SELinuxContext {
- pub colon: Style,
- pub user: Style,
- pub role: Style,
- pub typ: Style,
- pub range: Style,
- }
- #[derive(Clone, Copy, Debug, Default, PartialEq)]
- pub struct SecurityContext {
- pub none: Style,
- pub selinux: SELinuxContext,
- }
- impl UiStyles {
- pub fn plain() -> Self {
- Self::default()
- }
- }
- impl UiStyles {
- /// Sets a value on this set of colours using one of the keys understood
- /// by the `LS_COLORS` environment variable. Invalid keys set nothing, but
- /// return false.
- pub fn set_ls(&mut self, pair: &Pair<'_>) -> bool {
- match pair.key {
- "di" => self.filekinds.directory = pair.to_style(), // DIR
- "ex" => self.filekinds.executable = pair.to_style(), // EXEC
- "fi" => self.filekinds.normal = pair.to_style(), // FILE
- "pi" => self.filekinds.pipe = pair.to_style(), // FIFO
- "so" => self.filekinds.socket = pair.to_style(), // SOCK
- "bd" => self.filekinds.block_device = pair.to_style(), // BLK
- "cd" => self.filekinds.char_device = pair.to_style(), // CHR
- "ln" => self.filekinds.symlink = pair.to_style(), // LINK
- "or" => self.broken_symlink = pair.to_style(), // ORPHAN
- _ => return false,
- // Codes we don’t do anything with:
- // MULTIHARDLINK, DOOR, SETUID, SETGID, CAPABILITY,
- // STICKY_OTHER_WRITABLE, OTHER_WRITABLE, STICKY, MISSING
- }
- true
- }
- /// Sets a value on this set of colours using one of the keys understood
- /// by the `EXA_COLORS` environment variable. Invalid keys set nothing,
- /// but return false. This doesn’t take the `LS_COLORS` keys into account,
- /// so `set_ls` should have been run first.
- pub fn set_exa(&mut self, pair: &Pair<'_>) -> bool {
- match pair.key {
- "ur" => self.perms.user_read = pair.to_style(),
- "uw" => self.perms.user_write = pair.to_style(),
- "ux" => self.perms.user_execute_file = pair.to_style(),
- "ue" => self.perms.user_execute_other = pair.to_style(),
- "gr" => self.perms.group_read = pair.to_style(),
- "gw" => self.perms.group_write = pair.to_style(),
- "gx" => self.perms.group_execute = pair.to_style(),
- "tr" => self.perms.other_read = pair.to_style(),
- "tw" => self.perms.other_write = pair.to_style(),
- "tx" => self.perms.other_execute = pair.to_style(),
- "su" => self.perms.special_user_file = pair.to_style(),
- "sf" => self.perms.special_other = pair.to_style(),
- "xa" => self.perms.attribute = pair.to_style(),
- "sn" => self.set_number_style(pair.to_style()),
- "sb" => self.set_unit_style(pair.to_style()),
- "nb" => self.size.number_byte = pair.to_style(),
- "nk" => self.size.number_kilo = pair.to_style(),
- "nm" => self.size.number_mega = pair.to_style(),
- "ng" => self.size.number_giga = pair.to_style(),
- "nh" => self.size.number_huge = pair.to_style(),
- "ub" => self.size.unit_byte = pair.to_style(),
- "uk" => self.size.unit_kilo = pair.to_style(),
- "um" => self.size.unit_mega = pair.to_style(),
- "ug" => self.size.unit_giga = pair.to_style(),
- "uh" => self.size.unit_huge = pair.to_style(),
- "df" => self.size.major = pair.to_style(),
- "ds" => self.size.minor = pair.to_style(),
- "uu" => self.users.user_you = pair.to_style(),
- "un" => self.users.user_someone_else = pair.to_style(),
- "gu" => self.users.group_yours = pair.to_style(),
- "gn" => self.users.group_not_yours = pair.to_style(),
- "lc" => self.links.normal = pair.to_style(),
- "lm" => self.links.multi_link_file = pair.to_style(),
- "ga" => self.git.new = pair.to_style(),
- "gm" => self.git.modified = pair.to_style(),
- "gd" => self.git.deleted = pair.to_style(),
- "gv" => self.git.renamed = pair.to_style(),
- "gt" => self.git.typechange = pair.to_style(),
- "gi" => self.git.ignored = pair.to_style(),
- "xx" => self.punctuation = pair.to_style(),
- "da" => self.date = pair.to_style(),
- "in" => self.inode = pair.to_style(),
- "bl" => self.blocks = pair.to_style(),
- "hd" => self.header = pair.to_style(),
- "lp" => self.symlink_path = pair.to_style(),
- "cc" => self.control_char = pair.to_style(),
- "bO" => self.broken_path_overlay = pair.to_style(),
- _ => return false,
- }
- true
- }
- pub fn set_number_style(&mut self, style: Style) {
- self.size.number_byte = style;
- self.size.number_kilo = style;
- self.size.number_mega = style;
- self.size.number_giga = style;
- self.size.number_huge = style;
- }
- pub fn set_unit_style(&mut self, style: Style) {
- self.size.unit_byte = style;
- self.size.unit_kilo = style;
- self.size.unit_mega = style;
- self.size.unit_giga = style;
- self.size.unit_huge = style;
- }
- }
|