feat: deprecate pre- and postfix

This commit is contained in:
Jan De Dobbeleer 2022-02-01 14:07:58 +01:00 committed by Jan De Dobbeleer
parent b4292e2e50
commit 83980a3dff
46 changed files with 139 additions and 78 deletions

View file

@ -36,7 +36,7 @@ func (n *new) Enabled() bool {
} }
func (n *new) Template() string { func (n *new) Template() string {
return "{{.Text}} world" return " {{.Text}} world "
} }
func (n *new) Init(props properties.Properties, env environment.Environment) { func (n *new) Init(props properties.Properties, env environment.Environment) {

View file

@ -3,7 +3,6 @@ package engine
import ( import (
"oh-my-posh/color" "oh-my-posh/color"
"oh-my-posh/environment" "oh-my-posh/environment"
"oh-my-posh/properties"
"sync" "sync"
"time" "time"
) )
@ -111,23 +110,16 @@ func (b *Block) renderSegment(segment *Segment) {
b.writePowerline(false) b.writePowerline(false)
switch b.activeSegment.Style { switch b.activeSegment.Style {
case Plain, Powerline: case Plain, Powerline:
b.renderText(segment.stringValue) b.writer.Write(b.activeBackground, b.activeForeground, segment.stringValue)
case Diamond: case Diamond:
b.writer.Write(color.Transparent, b.activeBackground, b.activeSegment.LeadingDiamond) b.writer.Write(color.Transparent, b.activeBackground, b.activeSegment.LeadingDiamond)
b.renderText(segment.stringValue) b.writer.Write(b.activeBackground, b.activeForeground, segment.stringValue)
b.writer.Write(color.Transparent, b.activeBackground, b.activeSegment.TrailingDiamond) b.writer.Write(color.Transparent, b.activeBackground, b.activeSegment.TrailingDiamond)
} }
b.previousActiveSegment = b.activeSegment b.previousActiveSegment = b.activeSegment
b.writer.SetParentColors(b.activeBackground, b.activeForeground) b.writer.SetParentColors(b.activeBackground, b.activeForeground)
} }
func (b *Block) renderText(text string) {
defaultValue := " "
b.writer.Write(b.activeBackground, b.activeForeground, b.activeSegment.getValue(properties.Prefix, defaultValue))
b.writer.Write(b.activeBackground, b.activeForeground, text)
b.writer.Write(b.activeBackground, b.activeForeground, b.activeSegment.getValue(properties.Postfix, defaultValue))
}
func (b *Block) writePowerline(final bool) { func (b *Block) writePowerline(final bool) {
resolvePowerlineSymbol := func() string { resolvePowerlineSymbol := func() string {
var symbol string var symbol string

View file

@ -10,12 +10,18 @@ import (
const ( const (
colorBackground = properties.Property("color_background") colorBackground = properties.Property("color_background")
prefix = properties.Property("prefix")
postfix = properties.Property("postfix")
) )
func (cfg *Config) Migrate(env environment.Environment) { func (cfg *Config) Migrate(env environment.Environment) {
for _, block := range cfg.Blocks { for _, block := range cfg.Blocks {
block.migrate(env) block.migrate(env)
} }
for _, segment := range cfg.Tooltips {
segment.migrate(env)
}
cfg.updated = true cfg.updated = true
} }
@ -66,9 +72,9 @@ func (segment *Segment) migrate(env environment.Environment) {
stateList = append(stateList, `"Full"`) stateList = append(stateList, `"Full"`)
} }
if len(stateList) < 3 { if len(stateList) < 3 {
enabledTemplate := "{{ $stateList := list %s }}{{ if has .State.String $stateList }}{{.Icon}}{{.Percentage}}{{ end }}" enabledTemplate := "{{ $stateList := list %s }}{{ if has .State.String $stateList }}{{ .Icon }}{{ .Percentage }}{{ end }}"
template := segment.Properties.GetString(properties.SegmentTemplate, segment.writer.Template()) template := segment.Properties.GetString(properties.SegmentTemplate, segment.writer.Template())
template = strings.ReplaceAll(template, "{{.Icon}}{{.Percentage}}", fmt.Sprintf(enabledTemplate, strings.Join(stateList, " "))) template = strings.ReplaceAll(template, "{{ .Icon }}{{ .Percentage }}", fmt.Sprintf(enabledTemplate, strings.Join(stateList, " ")))
segment.Properties[properties.SegmentTemplate] = template segment.Properties[properties.SegmentTemplate] = template
} }
case PYTHON: case PYTHON:
@ -98,7 +104,8 @@ func (segment *Segment) migrate(env environment.Environment) {
segment.migrateColorOverride("version_mismatch_color", "{{ if .Mismatch }}%s{{ end }}") segment.migrateColorOverride("version_mismatch_color", "{{ if .Mismatch }}%s{{ end }}")
} }
case EXIT: case EXIT:
template := segment.writer.Template() segment.migrateTemplate()
template := segment.Properties.GetString(properties.SegmentTemplate, segment.writer.Template())
displayExitCode := properties.Property("display_exit_code") displayExitCode := properties.Property("display_exit_code")
if !segment.Properties.GetBool(displayExitCode, true) { if !segment.Properties.GetBool(displayExitCode, true) {
delete(segment.Properties, displayExitCode) delete(segment.Properties, displayExitCode)
@ -144,7 +151,15 @@ func (segment *Segment) migratePropertyKey(oldProperty, newProperty properties.P
} }
func (segment *Segment) migrateTemplate() { func (segment *Segment) migrateTemplate() {
defer segment.migratePreAndPostFix()
if segment.hasProperty(properties.SegmentTemplate) { if segment.hasProperty(properties.SegmentTemplate) {
// existing template, ensure to add default pre/postfix values
if !segment.hasProperty(prefix) {
segment.Properties[prefix] = " "
}
if !segment.hasProperty(postfix) {
segment.Properties[postfix] = " "
}
return return
} }
segment.Properties[properties.SegmentTemplate] = segment.writer.Template() segment.Properties[properties.SegmentTemplate] = segment.writer.Template()
@ -191,3 +206,21 @@ func (segment *Segment) migrateInlineColorOverride(property properties.Property,
template = strings.ReplaceAll(template, old, colorTemplate) template = strings.ReplaceAll(template, old, colorTemplate)
segment.Properties[properties.SegmentTemplate] = template segment.Properties[properties.SegmentTemplate] = template
} }
func (segment *Segment) migratePreAndPostFix() {
template := segment.Properties.GetString(properties.SegmentTemplate, segment.writer.Template())
defaultValue := " "
if segment.hasProperty(prefix) {
prefix := segment.Properties.GetString(prefix, defaultValue)
template = strings.TrimPrefix(template, defaultValue)
template = prefix + template
delete(segment.Properties, "prefix")
}
if segment.hasProperty(postfix) {
postfix := segment.Properties.GetString(postfix, defaultValue)
template = strings.TrimSuffix(template, defaultValue)
template += postfix
delete(segment.Properties, "postfix")
}
segment.Properties[properties.SegmentTemplate] = template
}

View file

@ -195,7 +195,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}{ }{
{ {
Case: "GIT", Case: "GIT",
Expected: "{{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} working {{ .Working.String }}{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} and{{ end }}{{ if .Staging.Changed }} staged {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0}} stash {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} worktree {{ .WorktreeCount }}{{ end }}", // nolint: lll Expected: " {{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} working {{ .Working.String }}{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} and{{ end }}{{ if .Staging.Changed }} staged {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0}} stash {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} worktree {{ .WorktreeCount }}{{ end }} ", // nolint: lll
Type: GIT, Type: GIT,
Props: properties.Map{ Props: properties.Map{
"local_working_icon": " working ", "local_working_icon": " working ",
@ -207,7 +207,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "GIT - Staging and Working Color", Case: "GIT - Staging and Working Color",
Expected: "{{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} working <#123456>{{ .Working.String }}</>{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} and{{ end }}{{ if .Staging.Changed }} staged <#123456>{{ .Staging.String }}</>{{ end }}{{ if gt .StashCount 0}} stash {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} worktree {{ .WorktreeCount }}{{ end }}", // nolint: lll Expected: " {{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} working <#123456>{{ .Working.String }}</>{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} and{{ end }}{{ if .Staging.Changed }} staged <#123456>{{ .Staging.String }}</>{{ end }}{{ if gt .StashCount 0}} stash {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} worktree {{ .WorktreeCount }}{{ end }} ", // nolint: lll
Type: GIT, Type: GIT,
Props: properties.Map{ Props: properties.Map{
"local_working_icon": " working ", "local_working_icon": " working ",
@ -221,7 +221,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "EXIT - No exit Code with Icon overrides", Case: "EXIT - No exit Code with Icon overrides",
Expected: "{{ if gt .Code 0 }}FAIL{{ else }}SUCCESS{{ end }}", Expected: " {{ if gt .Code 0 }}FAIL{{ else }}SUCCESS{{ end }} ",
Type: EXIT, Type: EXIT,
Props: properties.Map{ Props: properties.Map{
"display_exit_code": false, "display_exit_code": false,
@ -231,7 +231,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "EXIT - Always numeric", Case: "EXIT - Always numeric",
Expected: "{{ if gt .Code 0 }}FAIL {{ .Code }}{{ else }}SUCCESS{{ end }}", Expected: " {{ if gt .Code 0 }}FAIL {{ .Code }}{{ else }}SUCCESS{{ end }} ",
Type: EXIT, Type: EXIT,
Props: properties.Map{ Props: properties.Map{
"always_numeric": true, "always_numeric": true,
@ -241,7 +241,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "BATTERY", Case: "BATTERY",
Expected: `{{ if not .Error }}{{ $stateList := list "Discharging" "Full" }}{{ if has .State.String $stateList }}{{.Icon}}{{.Percentage}}{{ end }}{{ end }}{{.Error}}`, Expected: ` {{ if not .Error }}{{ $stateList := list "Discharging" "Full" }}{{ if has .State.String $stateList }}{{ .Icon }}{{ .Percentage }}{{ end }}{{ end }}{{ .Error }} `,
Type: BATTERY, Type: BATTERY,
Props: properties.Map{ Props: properties.Map{
"display_charging": false, "display_charging": false,
@ -249,7 +249,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "SESSION", Case: "SESSION",
Expected: "{{ if .SSHSession }}SSH {{ end }}{{ .UserName }}@{{ .HostName }}", Expected: " {{ if .SSHSession }}SSH {{ end }}{{ .UserName }}@{{ .HostName }} ",
Type: SESSION, Type: SESSION,
Props: properties.Map{ Props: properties.Map{
"ssh_icon": "SSH ", "ssh_icon": "SSH ",
@ -257,7 +257,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "SESSION no HOST", Case: "SESSION no HOST",
Expected: "{{ if .SSHSession }}\uf817 {{ end }}{{ .UserName }}", Expected: " {{ if .SSHSession }}\uf817 {{ end }}{{ .UserName }} ",
Type: SESSION, Type: SESSION,
Props: properties.Map{ Props: properties.Map{
"display_host": false, "display_host": false,
@ -265,7 +265,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "SESSION no USER", Case: "SESSION no USER",
Expected: "{{ if .SSHSession }}\uf817 {{ end }}{{ .HostName }}", Expected: " {{ if .SSHSession }}\uf817 {{ end }}{{ .HostName }} ",
Type: SESSION, Type: SESSION,
Props: properties.Map{ Props: properties.Map{
"display_user": false, "display_user": false,
@ -273,7 +273,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "SESSION no USER nor HOST", Case: "SESSION no USER nor HOST",
Expected: "{{ if .SSHSession }}\uf817 {{ end }}", Expected: " {{ if .SSHSession }}\uf817 {{ end }} ",
Type: SESSION, Type: SESSION,
Props: properties.Map{ Props: properties.Map{
"display_user": false, "display_user": false,
@ -282,7 +282,7 @@ func TestSegmentTemplateMigration(t *testing.T) {
}, },
{ {
Case: "SESSION - Color overrides", Case: "SESSION - Color overrides",
Expected: "{{ if .SSHSession }}\uf817 {{ end }}<#123456>{{ .UserName }}</>@<#789012>{{ .HostName }}</>", Expected: " {{ if .SSHSession }}\uf817 {{ end }}<#123456>{{ .UserName }}</>@<#789012>{{ .HostName }}</> ",
Type: SESSION, Type: SESSION,
Props: properties.Map{ Props: properties.Map{
"user_color": "#123456", "user_color": "#123456",
@ -337,3 +337,49 @@ func TestInlineColorOverride(t *testing.T) {
assert.Equal(t, tc.Expected, segment.Properties[properties.SegmentTemplate], tc.Case) assert.Equal(t, tc.Expected, segment.Properties[properties.SegmentTemplate], tc.Case)
} }
} }
func TestMigratePreAndPostfix(t *testing.T) {
cases := []struct {
Case string
Expected string
Props properties.Map
}{
{
Case: "Pre and Postfix",
Expected: "<background,transparent>\ue0b6</> \uf489 {{ .Name }} <transparent,background>\ue0b2</>",
Props: properties.Map{
"postfix": " <transparent,background>\ue0b2</>",
"prefix": "<background,transparent>\ue0b6</> \uf489 ",
"template": "{{ .Name }}",
},
},
{
Case: "Prefix",
Expected: " {{ .Name }} ",
Props: properties.Map{
"prefix": " ",
"template": "{{ .Name }}",
},
},
{
Case: "Postfix",
Expected: " {{ .Name }} ",
Props: properties.Map{
"postfix": " ",
"template": "{{ .Name }} ",
},
},
}
for _, tc := range cases {
segment := &Segment{
Properties: tc.Props,
writer: &MockedWriter{
template: tc.Props.GetString(properties.SegmentTemplate, ""),
},
}
segment.migrateTemplate()
assert.Equal(t, tc.Expected, segment.Properties[properties.SegmentTemplate], tc.Case)
assert.NotContains(t, segment.Properties, "prefix", tc.Case)
assert.NotContains(t, segment.Properties, "postfix", tc.Case)
}
}

View file

@ -169,13 +169,6 @@ func (segment *Segment) enabled() bool {
return segment.active return segment.active
} }
func (segment *Segment) getValue(property properties.Property, defaultValue string) string {
if value, ok := segment.Properties[property]; ok {
return properties.ParseString(value, defaultValue)
}
return defaultValue
}
func (segment *Segment) shouldIncludeFolder() bool { func (segment *Segment) shouldIncludeFolder() bool {
cwdIncluded := segment.cwdIncluded() cwdIncluded := segment.cwdIncluded()
cwdExcluded := segment.cwdExcluded() cwdExcluded := segment.cwdExcluded()

View file

@ -23,10 +23,6 @@ type Property string
const ( const (
// Style indicates with style to use // Style indicates with style to use
Style Property = "style" Style Property = "style"
// Prefix adds a text prefix to the segment
Prefix Property = "prefix"
// Postfix adds a text postfix to the segment
Postfix Property = "postfix"
// IncludeFolders folders to be included for the segment logic // IncludeFolders folders to be included for the segment logic
IncludeFolders Property = "include_folders" IncludeFolders Property = "include_folders"
// ExcludeFolders folders to be excluded for the segment logic // ExcludeFolders folders to be excluded for the segment logic

View file

@ -20,7 +20,7 @@ const (
) )
func (a *Aws) Template() string { func (a *Aws) Template() string {
return "{{ .Profile }}{{ if .Region }}@{{ .Region }}{{ end }}" return " {{ .Profile }}{{ if .Region }}@{{ .Region }}{{ end }} "
} }
func (a *Aws) Init(props properties.Properties, env environment.Environment) { func (a *Aws) Init(props properties.Properties, env environment.Environment) {

View file

@ -81,7 +81,7 @@ type AzurePowerShellSubscription struct {
} }
func (a *Az) Template() string { func (a *Az) Template() string {
return "{{ .Name }}" return " {{ .Name }} "
} }
func (a *Az) Init(props properties.Properties, env environment.Environment) { func (a *Az) Init(props properties.Properties, env environment.Environment) {

View file

@ -28,7 +28,7 @@ const (
) )
func (b *Battery) Template() string { func (b *Battery) Template() string {
return "{{ if not .Error }}{{ .Icon }}{{ .Percentage }}{{ end }}{{ .Error }}" return " {{ if not .Error }}{{ .Icon }}{{ .Percentage }}{{ end }}{{ .Error }} "
} }
func (b *Battery) Enabled() bool { func (b *Battery) Enabled() bool {

View file

@ -97,7 +97,7 @@ type Batch struct {
} }
func (bf *Brewfather) Template() string { func (bf *Brewfather) Template() string {
return "{{ .StatusIcon }} {{ if .DaysBottledOrFermented }}{{ .DaysBottledOrFermented }}{{ .DayIcon }} {{ end }}{{ url .Recipe.Name .URL }} {{ printf \"%.1f\" .MeasuredAbv }}%{{ if and (.Reading) (eq .Status \"Fermenting\") }} {{ printf \"%.3f\" .Reading.Gravity }} {{ .Reading.Temperature }}\u00b0 {{ .TemperatureTrendIcon }}{{ end }}" // nolint:lll return " {{ .StatusIcon }} {{ if .DaysBottledOrFermented }}{{ .DaysBottledOrFermented }}{{ .DayIcon }} {{ end }}{{ url .Recipe.Name .URL }} {{ printf \"%.1f\" .MeasuredAbv }}%{{ if and (.Reading) (eq .Status \"Fermenting\") }} {{ printf \"%.3f\" .Reading.Gravity }} {{ .Reading.Temperature }}\u00b0 {{ .TemperatureTrendIcon }}{{ end }} " // nolint:lll
} }
func (bf *Brewfather) Enabled() bool { func (bf *Brewfather) Enabled() bool {

View file

@ -21,7 +21,7 @@ const (
) )
func (c *Cmd) Template() string { func (c *Cmd) Template() string {
return "{{ .Output }}" return " {{ .Output }} "
} }
func (c *Cmd) Enabled() bool { func (c *Cmd) Enabled() bool {

View file

@ -13,7 +13,7 @@ type Dotnet struct {
} }
func (d *Dotnet) Template() string { func (d *Dotnet) Template() string {
return "{{ if .Unsupported }}\uf071{{ else }}{{ .Full }}{{ end }}" return " {{ if .Unsupported }}\uf071{{ else }}{{ .Full }}{{ end }} "
} }
func (d *Dotnet) Init(props properties.Properties, env environment.Environment) { func (d *Dotnet) Init(props properties.Properties, env environment.Environment) {

View file

@ -62,7 +62,7 @@ func (t *Executiontime) Enabled() bool {
} }
func (t *Executiontime) Template() string { func (t *Executiontime) Template() string {
return "{{ .FormattedMs }}" return " {{ .FormattedMs }} "
} }
func (t *Executiontime) Init(props properties.Properties, env environment.Environment) { func (t *Executiontime) Init(props properties.Properties, env environment.Environment) {

View file

@ -14,7 +14,7 @@ type Exit struct {
} }
func (e *Exit) Template() string { func (e *Exit) Template() string {
return "{{ if gt .Code 0 }}\uf00d {{ .Meaning }}{{ else }}\uf42e{{ end }}" return " {{ if gt .Code 0 }}\uf00d {{ .Meaning }}{{ else }}\uf42e{{ end }} "
} }
func (e *Exit) Enabled() bool { func (e *Exit) Enabled() bool {

View file

@ -108,7 +108,7 @@ const (
) )
func (g *Git) Template() string { func (g *Git) Template() string {
return "{{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} \uF044 {{ .Working.String }}{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uF046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0}} \uF692 {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} \uf1bb {{ .WorktreeCount }}{{ end }}" // nolint: lll return " {{ .HEAD }} {{ .BranchStatus }}{{ if .Working.Changed }} \uF044 {{ .Working.String }}{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uF046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0}} \uF692 {{ .StashCount }}{{ end }}{{ if gt .WorktreeCount 0}} \uf1bb {{ .WorktreeCount }}{{ end }} " // nolint: lll
} }
func (g *Git) Enabled() bool { func (g *Git) Enabled() bool {

View file

@ -16,7 +16,7 @@ const (
) )
func (i *IPify) Template() string { func (i *IPify) Template() string {
return "{{ .IP }}" return " {{ .IP }} "
} }
func (i *IPify) Enabled() bool { func (i *IPify) Enabled() bool {

View file

@ -35,7 +35,7 @@ type KubeContext struct {
} }
func (k *Kubectl) Template() string { func (k *Kubectl) Template() string {
return "{{ .Context }}{{ if .Namespace }} :: {{ .Namespace }}{{ end }}" return " {{ .Context }}{{ if .Namespace }} :: {{ .Namespace }}{{ end }} "
} }
func (k *Kubectl) Init(props properties.Properties, env environment.Environment) { func (k *Kubectl) Init(props properties.Properties, env environment.Environment) {

View file

@ -40,7 +40,7 @@ func TestKubectlSegment(t *testing.T) {
ParseKubeConfig: true, ParseKubeConfig: true,
Kubeconfig: "currentcontextmarker" + lsep + "contextdefinitionincomplete", Kubeconfig: "currentcontextmarker" + lsep + "contextdefinitionincomplete",
Files: testKubeConfigFiles, Files: testKubeConfigFiles,
ExpectedString: "ctx :: :: :: ", ExpectedString: "ctx :: :: ::",
ExpectedEnabled: true, ExpectedEnabled: true,
}, },
{Case: "disabled", Template: standardTemplate, KubectlExists: false, Context: "aaa", Namespace: "bbb", ExpectedEnabled: false}, {Case: "disabled", Template: standardTemplate, KubectlExists: false, Context: "aaa", Namespace: "bbb", ExpectedEnabled: false},

View file

@ -10,7 +10,7 @@ import (
) )
const ( const (
languageTemplate = "{{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}" languageTemplate = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} "
) )
type loadContext func() type loadContext func()

View file

@ -25,7 +25,7 @@ type VersionInfo struct {
} }
func (n *Nbgv) Template() string { func (n *Nbgv) Template() string {
return "{{ .Version }}" return " {{ .Version }} "
} }
func (n *Nbgv) Enabled() bool { func (n *Nbgv) Enabled() bool {

View file

@ -48,7 +48,7 @@ type NightscoutData struct {
} }
func (ns *Nightscout) Template() string { func (ns *Nightscout) Template() string {
return "{{ .Sgv }}" return " {{ .Sgv }} "
} }
func (ns *Nightscout) Enabled() bool { func (ns *Nightscout) Enabled() bool {

View file

@ -23,7 +23,7 @@ const (
) )
func (n *Node) Template() string { func (n *Node) Template() string {
return "{{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}" return " {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }} "
} }
func (n *Node) Init(props properties.Properties, env environment.Environment) { func (n *Node) Init(props properties.Properties, env environment.Environment) {

View file

@ -62,7 +62,7 @@ const (
) )
func (oi *Os) Template() string { func (oi *Os) Template() string {
return "{{ if .WSL }}WSL at {{ end }}{{.Icon}}" return " {{ if .WSL }}WSL at {{ end }}{{.Icon}} "
} }
func (oi *Os) Enabled() bool { func (oi *Os) Enabled() bool {

View file

@ -54,7 +54,7 @@ func (d *Owm) Enabled() bool {
} }
func (d *Owm) Template() string { func (d *Owm) Template() string {
return "{{ .Weather }} ({{ .Temperature }}{{ .UnitIcon }})" return " {{ .Weather }} ({{ .Temperature }}{{ .UnitIcon }}) "
} }
func (d *Owm) getResult() (*owmDataResponse, error) { func (d *Owm) getResult() (*owmDataResponse, error) {

View file

@ -39,7 +39,7 @@ func TestOWMSegmentSingle(t *testing.T) {
{ {
Case: "Sunny Display", Case: "Sunny Display",
JSONResponse: `{"weather":[{"icon":"01d"}],"main":{"temp":20}}`, JSONResponse: `{"weather":[{"icon":"01d"}],"main":{"temp":20}}`,
ExpectedString: "\ufa98 ", ExpectedString: "\ufa98",
ExpectedEnabled: true, ExpectedEnabled: true,
Template: "{{.Weather}} ", Template: "{{.Weather}} ",
}, },

View file

@ -57,7 +57,7 @@ const (
) )
func (pt *Path) Template() string { func (pt *Path) Template() string {
return "{{ .Path }}" return " {{ .Path }} "
} }
func (pt *Path) Enabled() bool { func (pt *Path) Enabled() bool {

View file

@ -5,6 +5,7 @@ import (
"oh-my-posh/mock" "oh-my-posh/mock"
"oh-my-posh/properties" "oh-my-posh/properties"
"oh-my-posh/template" "oh-my-posh/template"
"strings"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -32,7 +33,7 @@ func renderTemplate(env *mock.MockedEnvironment, segmentTemplate string, context
if err != nil { if err != nil {
return err.Error() return err.Error()
} }
return text return strings.TrimSpace(text)
} }
const ( const (
@ -312,7 +313,7 @@ func TestGetFullPath(t *testing.T) {
// StackCountEnabled=true and StackCount=2 // StackCountEnabled=true and StackCount=2
{Style: Full, FolderSeparatorIcon: "|", Pwd: "/", StackCount: 2, Expected: "2 /"}, {Style: Full, FolderSeparatorIcon: "|", Pwd: "/", StackCount: 2, Expected: "2 /"},
{Style: Full, Pwd: "", StackCount: 2, Expected: "2 "}, {Style: Full, Pwd: "", StackCount: 2, Expected: "2"},
{Style: Full, Pwd: "/", StackCount: 2, Expected: "2 /"}, {Style: Full, Pwd: "/", StackCount: 2, Expected: "2 /"},
{Style: Full, Pwd: "/usr/home", StackCount: 2, Expected: "2 ~"}, {Style: Full, Pwd: "/usr/home", StackCount: 2, Expected: "2 ~"},
{Style: Full, Pwd: "/usr/home/abc", StackCount: 2, Expected: "2 ~/abc"}, {Style: Full, Pwd: "/usr/home/abc", StackCount: 2, Expected: "2 ~/abc"},

View file

@ -43,7 +43,7 @@ func (p *Plastic) Init(props properties.Properties, env environment.Environment)
} }
func (p *Plastic) Template() string { func (p *Plastic) Template() string {
return "{{ .Selector }}" return " {{ .Selector }} "
} }
func (p *Plastic) Enabled() bool { func (p *Plastic) Enabled() bool {

View file

@ -18,7 +18,7 @@ const (
) )
func (p *PoshGit) Template() string { func (p *PoshGit) Template() string {
return "{{ .Status }}" return " {{ .Status }} "
} }
func (p *PoshGit) Enabled() bool { func (p *PoshGit) Enabled() bool {

View file

@ -17,7 +17,7 @@ const (
) )
func (p *Python) Template() string { func (p *Python) Template() string {
return "{{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }}" return " {{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Venv }} {{ end }}{{ .Full }}{{ end }} "
} }
func (p *Python) Init(props properties.Properties, env environment.Environment) { func (p *Python) Init(props properties.Properties, env environment.Environment) {

View file

@ -11,7 +11,7 @@ type Root struct {
} }
func (rt *Root) Template() string { func (rt *Root) Template() string {
return "\uF0E7" return " \uF0E7 "
} }
func (rt *Root) Enabled() bool { func (rt *Root) Enabled() bool {

View file

@ -22,7 +22,7 @@ func (s *Session) Enabled() bool {
} }
func (s *Session) Template() string { func (s *Session) Template() string {
return "{{ if .SSHSession }}\uf817 {{ end }}{{ .UserName }}@{{ .HostName }}" return " {{ if .SSHSession }}\uf817 {{ end }}{{ .UserName }}@{{ .HostName }} "
} }
func (s *Session) Init(props properties.Properties, env environment.Environment) { func (s *Session) Init(props properties.Properties, env environment.Environment) {

View file

@ -19,7 +19,7 @@ const (
) )
func (s *Shell) Template() string { func (s *Shell) Template() string {
return "{{ .Name }}" return " {{ .Name }} "
} }
func (s *Shell) Enabled() bool { func (s *Shell) Enabled() bool {

View file

@ -33,7 +33,7 @@ const (
) )
func (s *Spotify) Template() string { func (s *Spotify) Template() string {
return "{{ .Icon }}{{ if ne .Status \"stopped\" }}{{ .Artist }} - {{ .Track }}{{ end }}" return " {{ .Icon }}{{ if ne .Status \"stopped\" }}{{ .Artist }} - {{ .Track }}{{ end }} "
} }
func (s *Spotify) resolveIcon() { func (s *Spotify) resolveIcon() {

View file

@ -25,7 +25,7 @@ func TestSpotifyStringPlayingSong(t *testing.T) {
} }
func TestSpotifyStringStoppedSong(t *testing.T) { func TestSpotifyStringStoppedSong(t *testing.T) {
expected := "\uf04d " expected := "\uf04d"
env := new(mock.MockedEnvironment) env := new(mock.MockedEnvironment)
s := &Spotify{ s := &Spotify{
MusicPlayer: MusicPlayer{ MusicPlayer: MusicPlayer{

View file

@ -21,13 +21,13 @@ func TestSpotifyWsl(t *testing.T) {
}{ }{
{ {
Case: "Spotify not running", Case: "Spotify not running",
ExpectedString: " - ", ExpectedString: "-",
ExpectedEnabled: false, ExpectedEnabled: false,
ExecOutput: "INFO: No tasks are running which match the specified criteria.\n", ExecOutput: "INFO: No tasks are running which match the specified criteria.\n",
}, },
{ {
Case: "Spotify stopped/paused", Case: "Spotify stopped/paused",
ExpectedString: " - ", ExpectedString: "-",
ExpectedEnabled: false, ExpectedEnabled: false,
ExecOutput: `"Spotify.exe","21824","Console","1","124,928 K","Running","PC\user","0:09:44","Spotify Premium" ExecOutput: `"Spotify.exe","21824","Console","1","124,928 K","Running","PC\user","0:09:44","Spotify Premium"
"Spotify.exe","21876","Console","1","25,520 K","Running","PC\user","0:00:00","N/A" "Spotify.exe","21876","Console","1","25,520 K","Running","PC\user","0:00:00","N/A"
@ -49,7 +49,7 @@ func TestSpotifyWsl(t *testing.T) {
}, },
{ {
Case: "tasklist.exe not in path", Case: "tasklist.exe not in path",
ExpectedString: " - ", ExpectedString: "-",
ExpectedEnabled: false, ExpectedEnabled: false,
ExecOutput: ""}, ExecOutput: ""},
} }

View file

@ -71,7 +71,7 @@ func (a *AuthError) Error() string {
} }
func (s *Strava) Template() string { func (s *Strava) Template() string {
return "{{ if .Error }}{{ .Error }}{{ else }}{{ .Ago }}{{ end }}" return " {{ if .Error }}{{ .Error }}{{ else }}{{ .Ago }}{{ end }} "
} }
func (s *Strava) Enabled() bool { func (s *Strava) Enabled() bool {

View file

@ -36,7 +36,7 @@ const (
) )
func (s *SystemInfo) Template() string { func (s *SystemInfo) Template() string {
return "{{ round .PhysicalPercentUsed .Precision }}" return " {{ round .PhysicalPercentUsed .Precision }} "
} }
func (s *SystemInfo) Enabled() bool { func (s *SystemInfo) Enabled() bool {

View file

@ -44,7 +44,7 @@ func TestSysInfo(t *testing.T) {
{Case: "not enabled", ExpectDisabled: true, SysInfo: SystemInfo{PhysicalPercentUsed: 0, SwapPercentUsed: 0}}, {Case: "not enabled", ExpectDisabled: true, SysInfo: SystemInfo{PhysicalPercentUsed: 0, SwapPercentUsed: 0}},
{ {
Case: "2 physical cpus", Case: "2 physical cpus",
ExpectedString: "1200 1200 ", ExpectedString: "1200 1200",
Template: "{{range $cpu := .CPU}}{{round $cpu.Mhz 2 }} {{end}}", Template: "{{range $cpu := .CPU}}{{round $cpu.Mhz 2 }} {{end}}",
SysInfo: SystemInfo{CPU: []cpu.InfoStat{{Mhz: 1200}, {Mhz: 1200}}}, SysInfo: SystemInfo{CPU: []cpu.InfoStat{{Mhz: 1200}, {Mhz: 1200}}},
}, },

View file

@ -13,7 +13,7 @@ type Terraform struct {
} }
func (tf *Terraform) Template() string { func (tf *Terraform) Template() string {
return "{{ .WorkspaceName }}" return " {{ .WorkspaceName }} "
} }
func (tf *Terraform) Init(props properties.Properties, env environment.Environment) { func (tf *Terraform) Init(props properties.Properties, env environment.Environment) {

View file

@ -13,7 +13,7 @@ type Text struct {
} }
func (t *Text) Template() string { func (t *Text) Template() string {
return "{{ .Text }}" return " {{ .Text }} "
} }
func (t *Text) Enabled() bool { func (t *Text) Enabled() bool {

View file

@ -20,7 +20,7 @@ const (
) )
func (t *Time) Template() string { func (t *Time) Template() string {
return "{{ .CurrentDate | date .Format }}" return " {{ .CurrentDate | date .Format }} "
} }
func (t *Time) Enabled() bool { func (t *Time) Enabled() bool {

View file

@ -25,7 +25,7 @@ type wtData struct {
} }
func (w *Wakatime) Template() string { func (w *Wakatime) Template() string {
return "{{ secondsRound .CummulativeTotal.Seconds }}" return " {{ secondsRound .CummulativeTotal.Seconds }} "
} }
func (w *Wakatime) Enabled() bool { func (w *Wakatime) Enabled() bool {

View file

@ -15,7 +15,7 @@ type Wifi struct {
} }
const ( const (
defaultTemplate = "{{ if .Error }}{{ .Error }}{{ else }}\uFAA8 {{ .SSID }} {{ .Signal }}% {{ .ReceiveRate }}Mbps{{ end }}" defaultTemplate = " {{ if .Error }}{{ .Error }}{{ else }}\uFAA8 {{ .SSID }} {{ .Signal }}% {{ .ReceiveRate }}Mbps{{ end }} "
) )
func (w *Wifi) Template() string { func (w *Wifi) Template() string {

View file

@ -22,7 +22,7 @@ const (
) )
func (wr *WindowsRegistry) Template() string { func (wr *WindowsRegistry) Template() string {
return "{{ .Value }}" return " {{ .Value }} "
} }
func (wr *WindowsRegistry) Init(props properties.Properties, env environment.Environment) { func (wr *WindowsRegistry) Init(props properties.Properties, env environment.Environment) {

View file

@ -19,7 +19,7 @@ const (
) )
func (y *Ytm) Template() string { func (y *Ytm) Template() string {
return "{{ .Icon }}{{ if ne .Status \"stopped\" }}{{ .Artist }} - {{ .Track }}{{ end }}" return " {{ .Icon }}{{ if ne .Status \"stopped\" }}{{ .Artist }} - {{ .Track }}{{ end }} "
} }
func (y *Ytm) Enabled() bool { func (y *Ytm) Enabled() bool {