mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-11-10 04:54:03 -08:00
66941ddb43
resolves #24
147 lines
3.1 KiB
Go
Executable file
147 lines
3.1 KiB
Go
Executable file
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"os/user"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
|
|
"github.com/distatus/battery"
|
|
ps "github.com/mitchellh/go-ps"
|
|
)
|
|
|
|
type environmentInfo interface {
|
|
getenv(key string) string
|
|
getcwd() string
|
|
homeDir() string
|
|
hasFiles(pattern string) bool
|
|
getPathSeperator() string
|
|
getCurrentUser() (*user.User, error)
|
|
isRunningAsRoot() bool
|
|
getHostName() (string, error)
|
|
getRuntimeGOOS() string
|
|
hasCommand(command string) bool
|
|
runCommand(command string, args ...string) string
|
|
runShellCommand(shell string, command string) string
|
|
lastErrorCode() int
|
|
getArgs() *args
|
|
getBatteryInfo() (*battery.Battery, error)
|
|
getShellName() string
|
|
}
|
|
|
|
type environment struct {
|
|
args *args
|
|
}
|
|
|
|
func (env *environment) getenv(key string) string {
|
|
return os.Getenv(key)
|
|
}
|
|
|
|
func (env *environment) getcwd() string {
|
|
dir, err := os.Getwd()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
// on Windows, and being case sentisitive and not consistent and all, this gives silly issues
|
|
return strings.Replace(dir, "c:", "C:", 1)
|
|
}
|
|
|
|
func (env *environment) homeDir() string {
|
|
usr, err := user.Current()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
homeDir := usr.HomeDir
|
|
// on Windows, and being case sentisitive and not consistent and all, this gives silly issues
|
|
return strings.Replace(homeDir, "c:", "C:", 1)
|
|
}
|
|
|
|
func (env *environment) hasFiles(pattern string) bool {
|
|
cwd := env.getcwd()
|
|
pattern = cwd + env.getPathSeperator() + pattern
|
|
matches, err := filepath.Glob(pattern)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return len(matches) > 0
|
|
}
|
|
|
|
func (env *environment) getPathSeperator() string {
|
|
return string(os.PathSeparator)
|
|
}
|
|
|
|
func (env *environment) getCurrentUser() (*user.User, error) {
|
|
return user.Current()
|
|
}
|
|
|
|
func (env *environment) getHostName() (string, error) {
|
|
hostName, err := os.Hostname()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return cleanHostName(hostName), nil
|
|
}
|
|
|
|
func (env *environment) getRuntimeGOOS() string {
|
|
return runtime.GOOS
|
|
}
|
|
|
|
func (env *environment) runCommand(command string, args ...string) string {
|
|
out, err := exec.Command(command, args...).Output()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(string(out))
|
|
}
|
|
|
|
func (env *environment) runShellCommand(shell string, command string) string {
|
|
out, err := exec.Command(shell, "-c", command).Output()
|
|
if err != nil {
|
|
log.Println(err)
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(string(out))
|
|
}
|
|
|
|
func (env *environment) hasCommand(command string) bool {
|
|
_, err := exec.LookPath(command)
|
|
return err == nil
|
|
}
|
|
|
|
func (env *environment) lastErrorCode() int {
|
|
return *env.args.ErrorCode
|
|
}
|
|
|
|
func (env *environment) getArgs() *args {
|
|
return env.args
|
|
}
|
|
|
|
func (env *environment) getBatteryInfo() (*battery.Battery, error) {
|
|
return battery.Get(0)
|
|
}
|
|
|
|
func (env *environment) getShellName() string {
|
|
pid := os.Getppid()
|
|
p, err := ps.FindProcess(pid)
|
|
|
|
if err != nil {
|
|
return "unknown"
|
|
}
|
|
shell := strings.Replace(p.Executable(), ".exe", "", 1)
|
|
return strings.Trim(shell, " ")
|
|
}
|
|
|
|
func cleanHostName(hostName string) string {
|
|
garbage := []string{
|
|
".lan",
|
|
".local",
|
|
}
|
|
for _, g := range garbage {
|
|
hostName = strings.Replace(hostName, g, "", 1)
|
|
}
|
|
return hostName
|
|
}
|