summaryrefslogtreecommitdiffstats
path: root/icons.go
diff options
context:
space:
mode:
Diffstat (limited to 'icons.go')
-rw-r--r--icons.go62
1 files changed, 34 insertions, 28 deletions
diff --git a/icons.go b/icons.go
index ac4230f..5583864 100644
--- a/icons.go
+++ b/icons.go
@@ -7,10 +7,16 @@ import (
"strings"
)
-type iconMap map[string]string
+type iconMap struct {
+ icons map[string]string
+ useLinkTarget bool
+}
func parseIcons() iconMap {
- im := make(iconMap)
+ im := iconMap{
+ icons: make(map[string]string),
+ useLinkTarget: false,
+ }
defaultIcons := []string{
"ln=l",
@@ -44,7 +50,7 @@ func parseIcons() iconMap {
return im
}
-func (im iconMap) parseFile(path string) {
+func (im *iconMap) parseFile(path string) {
log.Printf("reading file: %s", path)
f, err := os.Open(path)
@@ -61,19 +67,11 @@ func (im iconMap) parseFile(path string) {
}
for _, pair := range pairs {
- key, val := pair[0], pair[1]
-
- key = replaceTilde(key)
-
- if filepath.IsAbs(key) {
- key = filepath.Clean(key)
- }
-
- im[key] = val
+ im.parsePair(pair)
}
}
-func (im iconMap) parseEnv(env string) {
+func (im *iconMap) parseEnv(env string) {
for _, entry := range strings.Split(env, ":") {
if entry == "" {
continue
@@ -86,25 +84,33 @@ func (im iconMap) parseEnv(env string) {
return
}
- key, val := pair[0], pair[1]
+ im.parsePair(pair)
+ }
+}
- key = replaceTilde(key)
+func (im *iconMap) parsePair(pair []string) {
+ key, val := pair[0], pair[1]
- if filepath.IsAbs(key) {
- key = filepath.Clean(key)
- }
+ key = replaceTilde(key)
- im[key] = val
+ if filepath.IsAbs(key) {
+ key = filepath.Clean(key)
}
+
+ if key == "ln" && val == "target" {
+ im.useLinkTarget = true
+ }
+
+ im.icons[key] = val
}
func (im iconMap) get(f *file) string {
- if val, ok := im[f.path]; ok {
+ if val, ok := im.icons[f.path]; ok {
return val
}
if f.IsDir() {
- if val, ok := im[f.Name()+"/"]; ok {
+ if val, ok := im.icons[f.Name()+"/"]; ok {
return val
}
}
@@ -112,7 +118,7 @@ func (im iconMap) get(f *file) string {
var key string
switch {
- case f.linkState == working:
+ case f.linkState == working && !im.useLinkTarget:
key = "ln"
case f.linkState == broken:
key = "or"
@@ -140,27 +146,27 @@ func (im iconMap) get(f *file) string {
key = "ex"
}
- if val, ok := im[key]; ok {
+ if val, ok := im.icons[key]; ok {
return val
}
- if val, ok := im[f.Name()+"*"]; ok {
+ if val, ok := im.icons[f.Name()+"*"]; ok {
return val
}
- if val, ok := im["*"+f.Name()]; ok {
+ if val, ok := im.icons["*"+f.Name()]; ok {
return val
}
- if val, ok := im[filepath.Base(f.Name())+".*"]; ok {
+ if val, ok := im.icons[filepath.Base(f.Name())+".*"]; ok {
return val
}
- if val, ok := im["*"+strings.ToLower(f.ext)]; ok {
+ if val, ok := im.icons["*"+strings.ToLower(f.ext)]; ok {
return val
}
- if val, ok := im["fi"]; ok {
+ if val, ok := im.icons["fi"]; ok {
return val
}