ea_command/commands/
list.rs

1use atty;
2use crate::archive;
3use crate::Location;
4
5fn colored_location(index: &usize, location: &Location) -> String {
6    let mut output = format!("[\x1b[0m\x1b[31m{}\x1b[0m] {}", index + 1, location.path);
7
8    if let Some(line_number) = location.line {
9        output = format!("{}\x1b[2m:\x1b[0m\x1b[32m{}\x1b[0m", output, &line_number);
10        if let Some(column_number) = location.column {
11            output = format!("{}\x1b[2m:{}\x1b[0m", output, column_number);
12        }
13    }
14
15    output
16}
17
18fn uncolored_location(index: &usize, location: &Location) -> String {
19    let mut output = format!("[{}] {}", index + 1, location.path);
20    if let Some(line_number) = location.line {
21        output = format!("{}:{}", output, &line_number);
22        if let Some(column_number) = location.column {
23            output = format!("{}:{}", output, column_number);
24        }
25    }
26
27    output
28}
29
30pub fn list() {
31    for (idx, location) in archive::read().iter().enumerate() {
32        if atty::is(atty::Stream::Stdout) {
33            println!("{}", colored_location(&idx, location));
34        } else {
35            println!("{}", uncolored_location(&idx, location));
36        }
37    }
38}