Files
dx/filetypes.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
}