Skip to content

Commit 2c08598

Browse files
committedOct 13, 2019
Allow custom colors via CLI
1 parent 79164fd commit 2c08598

File tree

1 file changed

+86
-2
lines changed

1 file changed

+86
-2
lines changed
 

‎src/main.rs

+86-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ struct Info {
4444
number_of_lines: usize,
4545
license: String,
4646
custom_logo: Language,
47+
custom_colors: Vec<String>,
4748
}
4849

4950
impl fmt::Display for Info {
@@ -376,6 +377,50 @@ fn main() -> Result<()> {
376377
.takes_value(true)
377378
.default_value("")
378379
.help("Overrides showing the dominant language ascii logo"))
380+
.arg(Arg::with_name("colors")
381+
.short("c")
382+
.long("colors")
383+
.multiple(true)
384+
.takes_value(true)
385+
.possible_values(&[
386+
"0",
387+
"1",
388+
"2",
389+
"3",
390+
"4",
391+
"5",
392+
"6",
393+
"7",
394+
"8",
395+
"9",
396+
"10",
397+
"11",
398+
"12",
399+
"13",
400+
"14",
401+
"15",
402+
])
403+
.hide_possible_values(true)
404+
.help(&format!(
405+
"Specifies a preferred color set. Unspecified colors will remain as default.
406+
Possible values: [{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}]",
407+
"0".black(),
408+
"1".red(),
409+
"2".green(),
410+
"3".yellow(),
411+
"4".blue(),
412+
"5".magenta(),
413+
"6".cyan(),
414+
"7".white(),
415+
"8".bright_black(),
416+
"9".bright_red(),
417+
"10".bright_green(),
418+
"11".bright_yellow(),
419+
"12".bright_blue(),
420+
"13".bright_magenta(),
421+
"14".bright_cyan(),
422+
"15".bright_white(),
423+
)))
379424
.get_matches();
380425
let dir = String::from(matches.value_of("directory").unwrap());
381426
let custom_logo: Language = Language::from_str(
@@ -399,6 +444,11 @@ fn main() -> Result<()> {
399444
let repo_size = get_packed_size(&dir)?;
400445
let last_change = get_last_change(&dir)?;
401446
let creation_date = get_creation_time().unwrap();
447+
let custom_colors: Vec<String> = if let Some(values) = matches.values_of("colors") {
448+
values.map(String::from).collect()
449+
} else {
450+
Vec::new()
451+
};
402452

403453
let info = Info {
404454
project_name: config.repository_name,
@@ -415,6 +465,7 @@ fn main() -> Result<()> {
415465
number_of_lines: get_total_loc(&tokei_langs),
416466
license: project_license(&dir)?,
417467
custom_logo,
468+
custom_colors,
418469
};
419470

420471
println!("{}", info);
@@ -871,7 +922,7 @@ impl Info {
871922
&self.custom_logo
872923
};
873924

874-
match language {
925+
let colors = match language {
875926
Language::Assembly => vec![Color::Cyan],
876927
Language::C => vec![Color::BrightBlue, Color::Blue],
877928
Language::Clojure => vec![Color::BrightBlue, Color::BrightGreen],
@@ -908,7 +959,17 @@ impl Info {
908959
Language::Php => vec![Color::BrightWhite],
909960
Language::Zig => vec![Color::Yellow],
910961
Language::Unknown => vec![Color::White],
911-
}
962+
};
963+
964+
let colors: Vec<Color> = colors.iter().enumerate().map(|(index, default_color)| {
965+
if let Some(color_num) = self.custom_colors.get(index) {
966+
if let Some(color) = num_to_color(color_num) {
967+
return color;
968+
}
969+
}
970+
*default_color
971+
}).collect();
972+
colors
912973
}
913974
}
914975

@@ -941,3 +1002,26 @@ impl fmt::Debug for Error {
9411002
write!(f, "{}", content)
9421003
}
9431004
}
1005+
1006+
fn num_to_color(num: &str) -> Option<Color> {
1007+
let color = match num {
1008+
"0" => Color::Black,
1009+
"1" => Color::Red,
1010+
"2" => Color::Green,
1011+
"3" => Color::Yellow,
1012+
"4" => Color::Blue,
1013+
"5" => Color::Magenta,
1014+
"6" => Color::Cyan,
1015+
"7" => Color::White,
1016+
"8" => Color::BrightBlack,
1017+
"9" => Color::BrightRed,
1018+
"10" => Color::BrightGreen,
1019+
"11" => Color::BrightYellow,
1020+
"12" => Color::BrightBlue,
1021+
"13" => Color::BrightMagenta,
1022+
"14" => Color::BrightCyan,
1023+
"15" => Color::BrightWhite,
1024+
_ => return None,
1025+
};
1026+
Some(color)
1027+
}

0 commit comments

Comments
 (0)
Please sign in to comment.