mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-06-16 11:58:52 -04:00
The goutil that OpenCloud currently uses is one version from the release that adds FreeBSD support, this now compiles successfully on FreeBSD.
144 lines
2.8 KiB
Go
144 lines
2.8 KiB
Go
package envutil
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
|
|
"github.com/gookit/goutil/internal/comfunc"
|
|
"github.com/gookit/goutil/sysutil"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
// IsWin system. linux windows darwin
|
|
func IsWin() bool {
|
|
return runtime.GOOS == "windows"
|
|
}
|
|
|
|
// IsWindows system. alias of IsWin
|
|
func IsWindows() bool {
|
|
return runtime.GOOS == "windows"
|
|
}
|
|
|
|
// IsMac system
|
|
func IsMac() bool {
|
|
return runtime.GOOS == "darwin"
|
|
}
|
|
|
|
// IsLinux system
|
|
func IsLinux() bool {
|
|
return runtime.GOOS == "linux"
|
|
}
|
|
|
|
// IsMSys msys(MINGW64) env. alias of the sysutil.IsMSys()
|
|
func IsMSys() bool {
|
|
return sysutil.IsMSys()
|
|
}
|
|
|
|
// IsTerminal isatty check
|
|
//
|
|
// Usage:
|
|
//
|
|
// envutil.IsTerminal(os.Stdout.Fd())
|
|
func IsTerminal(fd uintptr) bool {
|
|
// return isatty.IsTerminal(fd) // "github.com/mattn/go-isatty"
|
|
return term.IsTerminal(int(fd))
|
|
}
|
|
|
|
// StdIsTerminal os.Stdout is terminal
|
|
func StdIsTerminal() bool {
|
|
return IsTerminal(os.Stdout.Fd())
|
|
}
|
|
|
|
// IsConsole check out is console env. alias of the sysutil.IsConsole()
|
|
func IsConsole(out io.Writer) bool {
|
|
return sysutil.IsConsole(out)
|
|
}
|
|
|
|
// HasShellEnv has shell env check.
|
|
//
|
|
// Usage:
|
|
//
|
|
// HasShellEnv("sh")
|
|
// HasShellEnv("bash")
|
|
func HasShellEnv(shell string) bool {
|
|
return comfunc.HasShellEnv(shell)
|
|
}
|
|
|
|
// Support color:
|
|
//
|
|
// "TERM=xterm"
|
|
// "TERM=xterm-vt220"
|
|
// "TERM=xterm-256color"
|
|
// "TERM=screen-256color"
|
|
// "TERM=tmux-256color"
|
|
// "TERM=rxvt-unicode-256color"
|
|
//
|
|
// Don't support color:
|
|
//
|
|
// "TERM=cygwin"
|
|
var specialColorTerms = map[string]bool{
|
|
"alacritty": true,
|
|
}
|
|
|
|
// IsSupportColor check current console is support color.
|
|
//
|
|
// Supported:
|
|
//
|
|
// linux, mac, or Windows's ConEmu, Cmder, putty, git-bash.exe
|
|
//
|
|
// Not support:
|
|
//
|
|
// windows cmd.exe, powerShell.exe
|
|
func IsSupportColor() bool {
|
|
envTerm := os.Getenv("TERM")
|
|
if strings.Contains(envTerm, "xterm") {
|
|
return true
|
|
}
|
|
|
|
// it's special color term
|
|
if _, ok := specialColorTerms[envTerm]; ok {
|
|
return true
|
|
}
|
|
|
|
// like on ConEmu software, e.g "ConEmuANSI=ON"
|
|
if os.Getenv("ConEmuANSI") == "ON" {
|
|
return true
|
|
}
|
|
|
|
// like on ConEmu software, e.g "ANSICON=189x2000 (189x43)"
|
|
if os.Getenv("ANSICON") != "" {
|
|
return true
|
|
}
|
|
|
|
// up: if support 256-color, can also support basic color.
|
|
return IsSupport256Color()
|
|
}
|
|
|
|
// IsSupport256Color render
|
|
func IsSupport256Color() bool {
|
|
// "TERM=xterm-256color"
|
|
// "TERM=screen-256color"
|
|
// "TERM=tmux-256color"
|
|
// "TERM=rxvt-unicode-256color"
|
|
supported := strings.Contains(os.Getenv("TERM"), "256color")
|
|
if !supported {
|
|
// up: if support true-color, can also support 256-color.
|
|
supported = IsSupportTrueColor()
|
|
}
|
|
|
|
return supported
|
|
}
|
|
|
|
// IsSupportTrueColor render. IsSupportRGBColor
|
|
func IsSupportTrueColor() bool {
|
|
// "COLORTERM=truecolor"
|
|
return strings.Contains(os.Getenv("COLORTERM"), "truecolor")
|
|
}
|
|
|
|
// IsGithubActions env
|
|
func IsGithubActions() bool {
|
|
return os.Getenv("GITHUB_ACTIONS") == "true"
|
|
}
|