mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-28 20:39:40 -08:00
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package main
|
|
|
|
type language struct {
|
|
props *properties
|
|
env environmentInfo
|
|
extensions []string
|
|
commands []string
|
|
versionParam string
|
|
versionRegex string
|
|
version string
|
|
}
|
|
|
|
const (
|
|
// DisplayModeProperty sets the display mode (always, when_in_context, never)
|
|
DisplayModeProperty Property = "display_mode"
|
|
// DisplayModeAlways displays the segement always
|
|
DisplayModeAlways string = "always"
|
|
// DisplayModeContext displays the segment when the current folder contains certain extensions
|
|
DisplayModeContext string = "context"
|
|
// DisplayModeNever hides the segment
|
|
DisplayModeNever string = "never"
|
|
)
|
|
|
|
func (l *language) string() string {
|
|
if l.props.getBool(DisplayVersion, true) {
|
|
return l.version
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (l *language) enabled() bool {
|
|
displayMode := l.props.getString(DisplayModeProperty, DisplayModeContext)
|
|
displayVersion := l.props.getBool(DisplayVersion, true)
|
|
hasVersion := l.getVersion()
|
|
|
|
switch displayMode {
|
|
case DisplayModeAlways:
|
|
return (hasVersion || !displayVersion)
|
|
case DisplayModeNever:
|
|
return false
|
|
case DisplayModeContext:
|
|
fallthrough
|
|
default:
|
|
return l.isInContext() && (hasVersion || !displayVersion)
|
|
}
|
|
}
|
|
|
|
func (l *language) isInContext() bool {
|
|
for i, extension := range l.extensions {
|
|
if l.env.hasFiles(extension) {
|
|
break
|
|
}
|
|
if i == len(l.extensions)-1 {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (l *language) getVersion() bool {
|
|
var executable string
|
|
for i, command := range l.commands {
|
|
if l.env.hasCommand(command) {
|
|
executable = command
|
|
break
|
|
}
|
|
if i == len(l.commands)-1 {
|
|
return false
|
|
}
|
|
}
|
|
versionInfo, _ := l.env.runCommand(executable, l.versionParam)
|
|
values := findNamedRegexMatch(l.versionRegex, versionInfo)
|
|
l.version = values["version"]
|
|
|
|
return true
|
|
}
|