47 lines
640 B
Go
47 lines
640 B
Go
|
package tilde
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"runtime"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
ErrNoHome = errors.New("no home found")
|
||
|
)
|
||
|
|
||
|
func Expand(path string) (string, error) {
|
||
|
if !strings.HasPrefix(path, "~") {
|
||
|
return path, nil
|
||
|
}
|
||
|
|
||
|
home, err := Home()
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return home + path[1:], nil
|
||
|
}
|
||
|
|
||
|
func Home() (string, error) {
|
||
|
home := ""
|
||
|
|
||
|
switch runtime.GOOS {
|
||
|
case "windows":
|
||
|
home = filepath.Join(os.Getenv("HomeDrive"), os.Getenv("HomePath"))
|
||
|
if home == "" {
|
||
|
home = os.Getenv("UserProfile")
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
home = os.Getenv("HOME")
|
||
|
}
|
||
|
|
||
|
if home == "" {
|
||
|
return "", ErrNoHome
|
||
|
}
|
||
|
return home, nil
|
||
|
}
|