94 lines
3.0 KiB
Go
94 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
// Dateityp → Farbe, nach den file_type-Rollen des eza-Themes
|
|
// (~/src/mwxcol/themes/eza/theme.yml), damit dieselbe Datei in eza und dx
|
|
// dieselbe Farbe hat.
|
|
var byExt = map[string]*color.Color{}
|
|
|
|
func register(c *color.Color, exts ...string) {
|
|
for _, e := range exts {
|
|
byExt[e] = c
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
// source — blau
|
|
register(cBlue,
|
|
"go", "c", "h", "cc", "cpp", "cxx", "hpp", "rs", "py", "pl", "pm", "t",
|
|
"sh", "bash", "zsh", "fish", "js", "mjs", "cjs", "ts", "jsx", "tsx",
|
|
"rb", "java", "kt", "swift", "m", "mm", "php", "lua", "sql", "r", "jl",
|
|
"hs", "el", "vim", "scala", "cs", "dart", "zig", "asm", "s", "f90",
|
|
"html", "htm", "css", "scss", "sass", "less", "vue", "svelte",
|
|
"json", "yml", "yaml", "toml", "ini", "conf", "cfg", "xml", "plist",
|
|
"md", "markdown", "tex", "awk", "sed")
|
|
// compressed — orange
|
|
register(cOrange,
|
|
"zip", "tar", "gz", "tgz", "bz2", "tbz", "xz", "txz", "zst", "7z",
|
|
"rar", "lz", "lzma", "z", "jar", "war", "dmg", "iso", "pkg", "deb", "rpm")
|
|
// image — violett
|
|
register(cViolet,
|
|
"jpg", "jpeg", "png", "gif", "bmp", "tif", "tiff", "svg", "webp",
|
|
"heic", "heif", "ico", "psd", "ai", "eps", "raw", "cr2", "nef", "dng",
|
|
"stl", "obj3d")
|
|
// video — pink
|
|
register(cPink,
|
|
"mp4", "mov", "avi", "mkv", "webm", "m4v", "mpg", "mpeg", "wmv", "flv", "m2ts")
|
|
// music / lossless — grün
|
|
register(cGreen,
|
|
"mp3", "aac", "m4a", "ogg", "opus", "wma", "flac", "wav", "aiff", "aif", "alac")
|
|
// crypto — rot
|
|
register(cRed,
|
|
"asc", "gpg", "pgp", "sig", "key", "pem", "crt", "cer", "p12", "kdbx")
|
|
// document — weiß
|
|
register(cWhite,
|
|
"pdf", "doc", "docx", "odt", "xls", "xlsx", "ods", "ppt", "pptx", "odp",
|
|
"epub", "rtf", "txt", "csv", "pages", "numbers")
|
|
// compiled — grau
|
|
register(cGrey,
|
|
"o", "a", "so", "dylib", "obj", "lib", "class", "pyc", "pyo", "wasm", "d")
|
|
// temp — dunkel
|
|
register(cDarker,
|
|
"tmp", "temp", "swp", "swo", "bak", "old", "orig", "rej", "lock",
|
|
"part", "crdownload", "log")
|
|
}
|
|
|
|
// build — gelb (README, Makefile, …)
|
|
var byName = map[string]*color.Color{
|
|
"makefile": cYellow, "gnumakefile": cYellow, "cmakelists.txt": cYellow,
|
|
"dockerfile": cYellow, "justfile": cYellow, "rakefile": cYellow,
|
|
"go.mod": cYellow, "go.sum": cYellow, "package.json": cYellow,
|
|
"package-lock.json": cYellow, "cargo.toml": cYellow, "cargo.lock": cYellow,
|
|
"license": cYellow, "copying": cYellow,
|
|
".ds_store": cDarker, ".gitignore": cDark, ".gitattributes": cDark,
|
|
}
|
|
|
|
func fileColor(name string, mode os.FileMode) *color.Color {
|
|
if mode&0o111 != 0 { // ausführbar schlägt alles andere, wie in eza
|
|
return cExecB
|
|
}
|
|
low := strings.ToLower(name)
|
|
if c, ok := byName[low]; ok {
|
|
return c
|
|
}
|
|
if strings.HasPrefix(low, "readme") || strings.HasPrefix(low, "makefile") {
|
|
return cYellow
|
|
}
|
|
if strings.HasSuffix(name, "~") {
|
|
return cDarker
|
|
}
|
|
if ext := strings.TrimPrefix(filepath.Ext(low), "."); ext != "" {
|
|
if c, ok := byExt[ext]; ok {
|
|
return c
|
|
}
|
|
}
|
|
return cWhite
|
|
}
|