mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-28 04:19:41 -08:00
feat: add accordion segment style
This commit is contained in:
parent
23c2c383fe
commit
5e02063323
|
@ -33,7 +33,7 @@ understand how to configure a segment.
|
||||||
```
|
```
|
||||||
|
|
||||||
- type: `string` any of the included [segments][segments]
|
- type: `string` any of the included [segments][segments]
|
||||||
- style: `powerline` | `plain` | `diamond`
|
- style: `powerline` | `plain` | `diamond` | `accordion`
|
||||||
- powerline_symbol: `string`
|
- powerline_symbol: `string`
|
||||||
- invert_powerline: `boolean`
|
- invert_powerline: `boolean`
|
||||||
- leading_diamond: `string`
|
- leading_diamond: `string`
|
||||||
|
@ -72,6 +72,11 @@ While Powerline works great with a single symbol, sometimes you want a segment t
|
||||||
Just like a diamond: `< my segment text >`. The difference between this and plain is that the diamond symbols take the
|
Just like a diamond: `< my segment text >`. The difference between this and plain is that the diamond symbols take the
|
||||||
segment background as their foreground color.
|
segment background as their foreground color.
|
||||||
|
|
||||||
|
### Accordion
|
||||||
|
|
||||||
|
Same as Powerline except that it will display even when disabled, but without text. That way it seems
|
||||||
|
as if the segment is not expanded, just like an accordion.
|
||||||
|
|
||||||
## Powerline symbol
|
## Powerline symbol
|
||||||
|
|
||||||
Text character to use when `"style": "powerline"`.
|
Text character to use when `"style": "powerline"`.
|
||||||
|
|
|
@ -93,7 +93,7 @@ func (b *Block) renderSegmentsText() {
|
||||||
func (b *Block) renderSegments() (string, int) {
|
func (b *Block) renderSegments() (string, int) {
|
||||||
defer b.writer.Reset()
|
defer b.writer.Reset()
|
||||||
for _, segment := range b.Segments {
|
for _, segment := range b.Segments {
|
||||||
if !segment.enabled {
|
if !segment.enabled && segment.Style != Accordion {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
b.renderSegment(segment)
|
b.renderSegment(segment)
|
||||||
|
@ -113,6 +113,10 @@ func (b *Block) renderSegment(segment *Segment) {
|
||||||
b.writer.Write(color.Transparent, color.Background, b.activeSegment.LeadingDiamond)
|
b.writer.Write(color.Transparent, color.Background, b.activeSegment.LeadingDiamond)
|
||||||
b.writer.Write(color.Background, color.Foreground, segment.text)
|
b.writer.Write(color.Background, color.Foreground, segment.text)
|
||||||
b.writer.Write(color.Transparent, color.Background, b.activeSegment.TrailingDiamond)
|
b.writer.Write(color.Transparent, color.Background, b.activeSegment.TrailingDiamond)
|
||||||
|
case Accordion:
|
||||||
|
if segment.enabled {
|
||||||
|
b.writer.Write(color.Background, color.Foreground, segment.text)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
b.previousActiveSegment = b.activeSegment
|
b.previousActiveSegment = b.activeSegment
|
||||||
b.writer.SetParentColors(b.previousActiveSegment.background(), b.previousActiveSegment.foreground())
|
b.writer.SetParentColors(b.previousActiveSegment.background(), b.previousActiveSegment.foreground())
|
||||||
|
@ -121,9 +125,9 @@ func (b *Block) renderSegment(segment *Segment) {
|
||||||
func (b *Block) writePowerline(final bool) {
|
func (b *Block) writePowerline(final bool) {
|
||||||
resolvePowerlineSymbol := func() string {
|
resolvePowerlineSymbol := func() string {
|
||||||
var symbol string
|
var symbol string
|
||||||
if b.activeSegment.Style == Powerline {
|
if b.activeSegment.isPowerline() {
|
||||||
symbol = b.activeSegment.PowerlineSymbol
|
symbol = b.activeSegment.PowerlineSymbol
|
||||||
} else if b.previousActiveSegment != nil && b.previousActiveSegment.Style == Powerline {
|
} else if b.previousActiveSegment != nil && b.previousActiveSegment.isPowerline() {
|
||||||
symbol = b.previousActiveSegment.PowerlineSymbol
|
symbol = b.previousActiveSegment.PowerlineSymbol
|
||||||
}
|
}
|
||||||
return symbol
|
return symbol
|
||||||
|
@ -133,7 +137,7 @@ func (b *Block) writePowerline(final bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
bgColor := color.Background
|
bgColor := color.Background
|
||||||
if final || b.activeSegment.Style != Powerline {
|
if final || !b.activeSegment.isPowerline() {
|
||||||
bgColor = color.Transparent
|
bgColor = color.Transparent
|
||||||
}
|
}
|
||||||
if b.activeSegment.Style == Diamond && len(b.activeSegment.LeadingDiamond) == 0 {
|
if b.activeSegment.Style == Diamond && len(b.activeSegment.LeadingDiamond) == 0 {
|
||||||
|
@ -156,7 +160,7 @@ func (b *Block) getPowerlineColor() string {
|
||||||
if b.activeSegment.Style == Diamond && len(b.activeSegment.LeadingDiamond) == 0 {
|
if b.activeSegment.Style == Diamond && len(b.activeSegment.LeadingDiamond) == 0 {
|
||||||
return b.previousActiveSegment.background()
|
return b.previousActiveSegment.background()
|
||||||
}
|
}
|
||||||
if b.previousActiveSegment.Style != Powerline {
|
if !b.previousActiveSegment.isPowerline() {
|
||||||
return color.Transparent
|
return color.Transparent
|
||||||
}
|
}
|
||||||
return b.previousActiveSegment.background()
|
return b.previousActiveSegment.background()
|
||||||
|
|
|
@ -60,6 +60,15 @@ type SegmentStyle string
|
||||||
type SegmentType string
|
type SegmentType string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// Powerline writes it Powerline style
|
||||||
|
Powerline SegmentStyle = "powerline"
|
||||||
|
// Accordion writes it Powerline style but collapses the segment when disabled instead of hiding
|
||||||
|
Accordion SegmentStyle = "accordion"
|
||||||
|
// Plain writes it without ornaments
|
||||||
|
Plain SegmentStyle = "plain"
|
||||||
|
// Diamond writes the prompt shaped with a leading and trailing symbol
|
||||||
|
Diamond SegmentStyle = "diamond"
|
||||||
|
|
||||||
// SESSION represents the user info segment
|
// SESSION represents the user info segment
|
||||||
SESSION SegmentType = "session"
|
SESSION SegmentType = "session"
|
||||||
// PATH represents the current path segment
|
// PATH represents the current path segment
|
||||||
|
@ -102,12 +111,6 @@ const (
|
||||||
GOLANG SegmentType = "go"
|
GOLANG SegmentType = "go"
|
||||||
// JULIA writes which julia version is currently active
|
// JULIA writes which julia version is currently active
|
||||||
JULIA SegmentType = "julia"
|
JULIA SegmentType = "julia"
|
||||||
// Powerline writes it Powerline style
|
|
||||||
Powerline SegmentStyle = "powerline"
|
|
||||||
// Plain writes it without ornaments
|
|
||||||
Plain SegmentStyle = "plain"
|
|
||||||
// Diamond writes the prompt shaped with a leading and trailing symbol
|
|
||||||
Diamond SegmentStyle = "diamond"
|
|
||||||
// YTM writes YouTube Music information and status
|
// YTM writes YouTube Music information and status
|
||||||
YTM SegmentType = "ytm"
|
YTM SegmentType = "ytm"
|
||||||
// EXECUTIONTIME writes the execution time of the last run command
|
// EXECUTIONTIME writes the execution time of the last run command
|
||||||
|
@ -183,6 +186,10 @@ func (segment *Segment) shouldIncludeFolder() bool {
|
||||||
return cwdIncluded && !cwdExcluded
|
return cwdIncluded && !cwdExcluded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (segment *Segment) isPowerline() bool {
|
||||||
|
return segment.Style == Powerline || segment.Style == Accordion
|
||||||
|
}
|
||||||
|
|
||||||
func (segment *Segment) cwdIncluded() bool {
|
func (segment *Segment) cwdIncluded() bool {
|
||||||
value, ok := segment.Properties[properties.IncludeFolders]
|
value, ok := segment.Properties[properties.IncludeFolders]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
|
@ -207,7 +207,7 @@
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"title": "Segment Style",
|
"title": "Segment Style",
|
||||||
"description": "https://ohmyposh.dev/docs/config-segment#style",
|
"description": "https://ohmyposh.dev/docs/config-segment#style",
|
||||||
"enum": ["powerline", "plain", "diamond"]
|
"enum": ["powerline", "plain", "diamond", "accordion"]
|
||||||
},
|
},
|
||||||
"foreground": { "$ref": "#/definitions/color" },
|
"foreground": { "$ref": "#/definitions/color" },
|
||||||
"foreground_templates": { "$ref": "#/definitions/color_templates" },
|
"foreground_templates": { "$ref": "#/definitions/color_templates" },
|
||||||
|
|
Loading…
Reference in a new issue