// Package dirs provides functions sanitize directory names. package dirs import ( "os" "path/filepath" "strings" ) const sep = string(os.PathSeparator) var ( home = os.Getenv("HOME") pwd, _ = os.Getwd() ) // UnExpand returns dir after expanding some directory shortcuts // // $HOME -> ~ // // $PWD -> . // // workdir -> / func UnExpand(dir, workdir string) (outdir string) { if dir != "" { outdir = cleanDir(dir, pwd) } if workdir != "" { workdir = cleanDir(workdir, pwd) outdir = strings.Replace(outdir, workdir, "", 1) } else if home != pwd && pwd != "" { outdir = strings.Replace(outdir, pwd, ".", 1) } outdir = strings.Replace(outdir, home, "~", 1) outdir = UnEscape(outdir) if outdir == "" { outdir = "/" } return } func UnEscape(input string) string { return strings.ReplaceAll(input, "%20", " ") } func cleanDir(dir, pwd string) (out string) { if strings.HasPrefix(dir, ".") { out = filepath.Clean(dir) } else if !strings.HasPrefix(dir, sep) { out = filepath.Join(pwd, dir) } else { out = dir } return }