diff --git a/src/output/icons.rs b/src/output/icons.rs index db2560d..6181c0d 100644 --- a/src/output/icons.rs +++ b/src/output/icons.rs @@ -5,6 +5,7 @@ use term_grid as tg; use fs::File; use style::Colours; use output::file_name::FileStyle; +use output::cell::DisplayWidth; #[derive(PartialEq, Debug, Copy, Clone)] @@ -38,11 +39,12 @@ impl<'a> Render<'a> { grid.reserve(self.files.len()); for file in self.files.iter() { + let file_icon = icon(&file); let filename = self.style.for_file(file, self.colours).paint(); - let width = filename.width(); + let width = DisplayWidth::from(2) + filename.width(); grid.add(tg::Cell { - contents: format!("<>{}", filename.strings().to_string()), + contents: format!("{} {}", file_icon, filename.strings().to_string()), width: *width, }); } @@ -62,3 +64,82 @@ impl<'a> Render<'a> { } } } + +fn icon(file: &File) -> char { + if file.is_directory() { '\u{f115}' } + else { + // possible unnecessary clone + if let Some(ext) = file.ext.clone() { + match ext.as_str() { + "ai" => '\u{e7b4}', + "android" => '\u{e70e}', + "apple" => '\u{f179}', + "audio" => '\u{f001}', + "avro" => '\u{e60b}', + "c" => '\u{e61e}', + "clj" => '\u{e768}', + "coffee" => '\u{f0f4}', + "conf" => '\u{e615}', + "cpp" => '\u{e61d}', + "css" => '\u{e749}', + "d" => '\u{e7af}', + "dart" => '\u{e798}', + "db" => '\u{f1c0}', + "diff" => '\u{f440}', + "doc" => '\u{f1c2}', + "ebook" => '\u{e28b}', + "env" => '\u{f462}', + "epub" => '\u{e28a}', + "erl" => '\u{e7b1}', + "font" => '\u{f031}', + "gform" => '\u{f298}', + "git" => '\u{f1d3}', + "go" => '\u{e626}', + "hs" => '\u{e777}', + "html" => '\u{f13b}', + "image" => '\u{f1c5}', + "iml" => '\u{e7b5}', + "java" => '\u{e204}', + "js" => '\u{e74e}', + "json" => '\u{e60b}', + "jsx" => '\u{e7ba}', + "less" => '\u{e758}', + "log" => '\u{f18d}', + "lua" => '\u{e620}', + "md" => '\u{f48a}', + "mustache" => '\u{e60f}', + "npmignore" => '\u{e71e}', + "pdf" => '\u{f1c1}', + "php" => '\u{e73d}', + "pl" => '\u{e769}', + "ppt" => '\u{f1c4}', + "psd" => '\u{e7b8}', + "py" => '\u{e606}', + "r" => '\u{f25d}', + "rb" => '\u{e21e}', + "rdb" => '\u{e76d}', + "rss" => '\u{f09e}', + "rubydoc" => '\u{e73b}', + "sass" => '\u{e603}', + "scala" => '\u{e737}', + "shell" => '\u{f489}', + "sqlite3" => '\u{e7c4}', + "styl" => '\u{e600}', + "tex" => '\u{e600}', + "ts" => '\u{e628}', + "twig" => '\u{e61c}', + "txt" => '\u{f15c}', + "video" => '\u{f03d}', + "vim" => '\u{e62b}', + "windows" => '\u{f17a}', + "xls" => '\u{f1c3}', + "xml" => '\u{e619}', + "yml" => '\u{f481}', + "zip" => '\u{f410}', + _ => '\u{f15b}' + } + } else { + '\u{f15b}' + } + } +}