Skip to content

Commit 70a3133

Browse files
authored
Add ability to hide specific flags by setting their symbols to empty string (#132)
* Initial plan * Test commit for clean state --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]>
1 parent 3d6516b commit 70a3133

File tree

2 files changed

+187
-7
lines changed

2 files changed

+187
-7
lines changed

tmux/formater.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,11 @@ func (f *Formater) formatFlag(style, symbol string, count int) string {
306306
func (f *Formater) flags() string {
307307
var flags []string
308308
if f.st.IsClean {
309-
if f.st.NumStashed != 0 {
309+
if f.st.NumStashed != 0 && f.Symbols.Stashed != "" {
310310
flags = append(flags, f.formatFlag(f.Styles.Stashed, f.Symbols.Stashed, f.st.NumStashed))
311311
}
312312

313-
if !f.Options.HideClean {
313+
if !f.Options.HideClean && f.Symbols.Clean != "" {
314314
flags = append(flags, fmt.Sprintf("%s%s", f.Styles.Clean, f.Symbols.Clean))
315315
}
316316

@@ -319,23 +319,23 @@ func (f *Formater) flags() string {
319319
}
320320
}
321321

322-
if f.st.NumStaged != 0 {
322+
if f.st.NumStaged != 0 && f.Symbols.Staged != "" {
323323
flags = append(flags, f.formatFlag(f.Styles.Staged, f.Symbols.Staged, f.st.NumStaged))
324324
}
325325

326-
if f.st.NumConflicts != 0 {
326+
if f.st.NumConflicts != 0 && f.Symbols.Conflict != "" {
327327
flags = append(flags, f.formatFlag(f.Styles.Conflict, f.Symbols.Conflict, f.st.NumConflicts))
328328
}
329329

330-
if f.st.NumModified != 0 {
330+
if f.st.NumModified != 0 && f.Symbols.Modified != "" {
331331
flags = append(flags, f.formatFlag(f.Styles.Modified, f.Symbols.Modified, f.st.NumModified))
332332
}
333333

334-
if f.st.NumStashed != 0 {
334+
if f.st.NumStashed != 0 && f.Symbols.Stashed != "" {
335335
flags = append(flags, f.formatFlag(f.Styles.Stashed, f.Symbols.Stashed, f.st.NumStashed))
336336
}
337337

338-
if f.st.NumUntracked != 0 {
338+
if f.st.NumUntracked != 0 && f.Symbols.Untracked != "" {
339339
flags = append(flags, f.formatFlag(f.Styles.Untracked, f.Symbols.Untracked, f.st.NumUntracked))
340340
}
341341

tmux/formater_test.go

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,186 @@ func Test_stats(t *testing.T) {
979979
}
980980
}
981981

982+
func TestFlagsWithEmptySymbols(t *testing.T) {
983+
tests := []struct {
984+
name string
985+
styles styles
986+
symbols symbols
987+
st *gitstatus.Status
988+
want string
989+
}{
990+
{
991+
name: "empty stashed symbol hides stash count",
992+
styles: styles{
993+
Clear: "StyleClear",
994+
Modified: "StyleMod",
995+
Stashed: "StyleStash",
996+
},
997+
symbols: symbols{
998+
Modified: "SymbolMod",
999+
Stashed: "", // empty symbol should hide this flag
1000+
},
1001+
st: &gitstatus.Status{
1002+
NumStashed: 5,
1003+
Porcelain: gitstatus.Porcelain{
1004+
NumModified: 2,
1005+
},
1006+
},
1007+
want: "StyleClear" + "StyleModSymbolMod2",
1008+
},
1009+
{
1010+
name: "empty modified symbol hides modified count",
1011+
styles: styles{
1012+
Clear: "StyleClear",
1013+
Modified: "StyleMod",
1014+
Stashed: "StyleStash",
1015+
},
1016+
symbols: symbols{
1017+
Modified: "", // empty symbol should hide this flag
1018+
Stashed: "SymbolStash",
1019+
},
1020+
st: &gitstatus.Status{
1021+
NumStashed: 1,
1022+
Porcelain: gitstatus.Porcelain{
1023+
NumModified: 2,
1024+
},
1025+
},
1026+
want: "StyleClear" + "StyleStashSymbolStash1",
1027+
},
1028+
{
1029+
name: "empty staged symbol hides staged count",
1030+
styles: styles{
1031+
Clear: "StyleClear",
1032+
Staged: "StyleStaged",
1033+
Stashed: "StyleStash",
1034+
},
1035+
symbols: symbols{
1036+
Staged: "", // empty symbol should hide this flag
1037+
Stashed: "SymbolStash",
1038+
},
1039+
st: &gitstatus.Status{
1040+
NumStashed: 1,
1041+
Porcelain: gitstatus.Porcelain{
1042+
NumStaged: 3,
1043+
},
1044+
},
1045+
want: "StyleClear" + "StyleStashSymbolStash1",
1046+
},
1047+
{
1048+
name: "empty untracked symbol hides untracked count",
1049+
styles: styles{
1050+
Clear: "StyleClear",
1051+
Untracked: "StyleUntracked",
1052+
Stashed: "StyleStash",
1053+
},
1054+
symbols: symbols{
1055+
Untracked: "", // empty symbol should hide this flag
1056+
Stashed: "SymbolStash",
1057+
},
1058+
st: &gitstatus.Status{
1059+
NumStashed: 1,
1060+
Porcelain: gitstatus.Porcelain{
1061+
NumUntracked: 7,
1062+
},
1063+
},
1064+
want: "StyleClear" + "StyleStashSymbolStash1",
1065+
},
1066+
{
1067+
name: "empty conflict symbol hides conflict count",
1068+
styles: styles{
1069+
Clear: "StyleClear",
1070+
Conflict: "StyleConflict",
1071+
Stashed: "StyleStash",
1072+
},
1073+
symbols: symbols{
1074+
Conflict: "", // empty symbol should hide this flag
1075+
Stashed: "SymbolStash",
1076+
},
1077+
st: &gitstatus.Status{
1078+
NumStashed: 1,
1079+
Porcelain: gitstatus.Porcelain{
1080+
NumConflicts: 3,
1081+
},
1082+
},
1083+
want: "StyleClear" + "StyleStashSymbolStash1",
1084+
},
1085+
{
1086+
name: "empty clean symbol hides clean flag",
1087+
styles: styles{
1088+
Clear: "StyleClear",
1089+
Clean: "StyleClean",
1090+
Stashed: "StyleStash",
1091+
},
1092+
symbols: symbols{
1093+
Clean: "", // empty symbol should hide this flag
1094+
Stashed: "SymbolStash",
1095+
},
1096+
st: &gitstatus.Status{
1097+
IsClean: true,
1098+
NumStashed: 1,
1099+
},
1100+
want: "StyleClear" + "StyleStashSymbolStash1",
1101+
},
1102+
{
1103+
name: "empty stashed symbol in clean state hides stash count",
1104+
styles: styles{
1105+
Clear: "StyleClear",
1106+
Clean: "StyleClean",
1107+
},
1108+
symbols: symbols{
1109+
Clean: "SymbolClean",
1110+
Stashed: "", // empty symbol should hide this flag
1111+
},
1112+
st: &gitstatus.Status{
1113+
IsClean: true,
1114+
NumStashed: 1,
1115+
},
1116+
want: "StyleClear" + "StyleCleanSymbolClean",
1117+
},
1118+
{
1119+
name: "all symbols empty shows nothing",
1120+
styles: styles{
1121+
Clear: "StyleClear",
1122+
Clean: "StyleClean",
1123+
Staged: "StyleStaged",
1124+
Modified: "StyleMod",
1125+
Conflict: "StyleConflict",
1126+
Untracked: "StyleUntracked",
1127+
Stashed: "StyleStash",
1128+
},
1129+
symbols: symbols{
1130+
Clean: "",
1131+
Staged: "",
1132+
Modified: "",
1133+
Conflict: "",
1134+
Untracked: "",
1135+
Stashed: "",
1136+
},
1137+
st: &gitstatus.Status{
1138+
IsClean: false,
1139+
NumStashed: 1,
1140+
Porcelain: gitstatus.Porcelain{
1141+
NumStaged: 3,
1142+
NumModified: 2,
1143+
NumConflicts: 1,
1144+
NumUntracked: 4,
1145+
},
1146+
},
1147+
want: "",
1148+
},
1149+
}
1150+
for _, tt := range tests {
1151+
t.Run(tt.name, func(t *testing.T) {
1152+
f := &Formater{
1153+
Config: Config{Styles: tt.styles, Symbols: tt.symbols},
1154+
st: tt.st,
1155+
}
1156+
1157+
compareStrings(t, tt.want, f.flags())
1158+
})
1159+
}
1160+
}
1161+
9821162
func compareStrings(t *testing.T, want, got string) {
9831163
if got != want {
9841164
t.Errorf(`

0 commit comments

Comments
 (0)