Skip to content

Commit e9e20bb

Browse files
o2shspenserblack
andauthored
add language bar (#585)
* add language bar * fix text-colors * fix text-colors * fix naming * address pr review comments * Collect language bar to `String` Collects the language bar to a string to reduce String mutations. Co-authored-by: Spenser Black <[email protected]>
1 parent d18ebc1 commit e9e20bb

File tree

1 file changed

+40
-10
lines changed

1 file changed

+40
-10
lines changed

src/info/mod.rs

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -305,29 +305,59 @@ impl Info {
305305

306306
fn get_language_field(&self, title: &str) -> String {
307307
let mut language_field = String::from("");
308-
308+
let language_bar_length = 26;
309309
let pad = title.len() + 2;
310-
311-
let languages: Vec<(String, f64)> = {
312-
let mut iter = self.languages.iter().map(|x| (format!("{}", x.0), x.1));
310+
let color_palette = vec![
311+
Color::Red,
312+
Color::Green,
313+
Color::Yellow,
314+
Color::Blue,
315+
Color::Magenta,
316+
Color::Cyan,
317+
];
318+
319+
let languages: Vec<(String, f64, Color)> = {
320+
let mut iter = self.languages.iter().enumerate().map(|(i, x)| {
321+
let color = if self.config.true_color {
322+
x.0.get_colors(true)[0]
323+
} else {
324+
color_palette[i % color_palette.len()]
325+
};
326+
(format!("{}", x.0), x.1, color)
327+
});
313328
if self.languages.len() > 6 {
314329
let mut languages = iter.by_ref().take(6).collect::<Vec<_>>();
315330
let other_sum = iter.fold(0.0, |acc, x| acc + x.1);
316-
languages.push(("Other".to_owned(), other_sum));
331+
languages.push(("Other".to_owned(), other_sum, Color::White));
317332
languages
318333
} else {
319334
iter.collect()
320335
}
321336
};
322337

323-
for (cnt, language) in languages.iter().enumerate() {
338+
let language_bar: String = languages
339+
.iter()
340+
.map(|x| {
341+
let bar_width = std::cmp::max(
342+
(x.1 / 100. * language_bar_length as f64).round() as usize,
343+
1,
344+
);
345+
format!("{:<width$}", "".on_color(x.2), width = bar_width)
346+
})
347+
.collect();
348+
349+
language_field.push_str(&language_bar);
350+
351+
for (i, language) in languages.iter().enumerate() {
324352
let formatted_number = format!("{:.*}", 1, language.1);
325-
let language_str =
326-
format!("{} ({} %) ", language.0, formatted_number).color(self.text_colors.info);
327-
if cnt != 0 && cnt % 2 == 0 {
353+
let language_with_perc =
354+
format!("{} ({} %)", language.0, formatted_number).color(self.text_colors.info);
355+
let language_chip = "\u{25CF}".color(language.2);
356+
let language_str = format!("{} {} ", language_chip, language_with_perc);
357+
if i % 2 == 0 {
328358
language_field.push_str(&format!("\n{:<width$}{}", "", language_str, width = pad));
329359
} else {
330-
language_field.push_str(&format!("{}", language_str));
360+
language_field.push_str(&language_str.to_string());
331361
}
332362
}
333363
language_field

0 commit comments

Comments
 (0)