Skip to content

Commit 9ffa132

Browse files
feat: ignore folders for segments
1 parent 91b962a commit 9ffa132

File tree

4 files changed

+71
-10
lines changed

4 files changed

+71
-10
lines changed

engine.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,9 @@ func (e *engine) renderDiamondSegment(text string) {
6262
e.renderer.write(Transparent, e.activeSegment.Background, e.activeSegment.TrailingDiamond)
6363
}
6464

65-
func (e *engine) getStringProperty(property Property, defaultValue string) string {
66-
if value, ok := e.activeSegment.Properties[property]; ok {
67-
return parseString(value, defaultValue)
68-
}
69-
return defaultValue
70-
}
71-
7265
func (e *engine) renderText(text string) {
73-
prefix := e.getStringProperty(Prefix, " ")
74-
postfix := e.getStringProperty(Postfix, " ")
66+
prefix := e.activeSegment.getValue(Prefix, " ")
67+
postfix := e.activeSegment.getValue(Postfix, " ")
7568
e.renderer.write(e.activeSegment.Background, e.activeSegment.Foreground, fmt.Sprintf("%s%s%s", prefix, text, postfix))
7669
}
7770

@@ -90,7 +83,11 @@ func (e *engine) renderSegmentText(text string) {
9083
func (e *engine) renderBlockSegments(block *Block) string {
9184
defer e.reset()
9285
e.activeBlock = block
86+
cwd, _ := e.env.getwd()
9387
for _, segment := range block.Segments {
88+
if segment.hasValue(IgnoreFolders, cwd) {
89+
continue
90+
}
9491
props, err := segment.mapSegmentWithWriter(e.env)
9592
if err != nil || !segment.enabled() {
9693
continue

properties.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package main
22

3-
import "regexp"
3+
import (
4+
"fmt"
5+
"regexp"
6+
)
47

58
//Property defines one property of a segment for context
69
type Property string
@@ -15,6 +18,8 @@ const (
1518
Postfix Property = "postfix"
1619
//ColorBackground color the background or foreground when a specific color is set
1720
ColorBackground Property = "color_background"
21+
//IgnoreFolders folders to ignore and not run the segment logic
22+
IgnoreFolders Property = "ignore_folders"
1823
)
1924

2025
type properties struct {
@@ -73,3 +78,15 @@ func (p *properties) getBool(property Property, defaultValue bool) bool {
7378
}
7479
return boolValue
7580
}
81+
82+
func parseStringArray(value interface{}) []string {
83+
expectedValue, ok := value.([]interface{})
84+
if !ok {
85+
return []string{}
86+
}
87+
list := make([]string, len(expectedValue))
88+
for i, v := range expectedValue {
89+
list[i] = fmt.Sprint(v)
90+
}
91+
return list
92+
}

segment.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ func (segment *Segment) enabled() bool {
7272
return segment.writer.enabled()
7373
}
7474

75+
func (segment *Segment) getValue(property Property, defaultValue string) string {
76+
if value, ok := segment.Properties[property]; ok {
77+
return parseString(value, defaultValue)
78+
}
79+
return defaultValue
80+
}
81+
82+
func (segment *Segment) hasValue(property Property, match string) bool {
83+
if value, ok := segment.Properties[property]; ok {
84+
list := parseStringArray(value)
85+
for _, element := range list {
86+
if element == match {
87+
return true
88+
}
89+
}
90+
return false
91+
}
92+
return false
93+
}
94+
7595
func (segment *Segment) mapSegmentWithWriter(env environmentInfo) (*properties, error) {
7696
functions := map[SegmentType]SegmentWriter{
7797
Session: &session{},

segment_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"encoding/json"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
@@ -26,3 +27,29 @@ func TestMapSegmentWriterCannotMap(t *testing.T) {
2627
assert.Nil(t, props)
2728
assert.Error(t, err)
2829
}
30+
31+
func TestParseTestSettings(t *testing.T) {
32+
segmentJSON :=
33+
`
34+
{
35+
"type": "path",
36+
"style": "powerline",
37+
"powerline_symbol": "",
38+
"foreground": "#ffffff",
39+
"background": "#61AFEF",
40+
"properties": {
41+
"prefix": "  ",
42+
"style": "folder",
43+
"ignore_folders": [
44+
"go-my-psh"
45+
]
46+
}
47+
}
48+
`
49+
segment := &Segment{}
50+
err := json.Unmarshal([]byte(segmentJSON), segment)
51+
assert.NoError(t, err)
52+
expected := "go-my-psh"
53+
got := segment.hasValue(IgnoreFolders, expected)
54+
assert.True(t, got)
55+
}

0 commit comments

Comments
 (0)