aerc/lib/statusline/texter.go
Koni Marti ce18e92881 statusline: refactor to make it more customizable
Refactor statusline by clearly separating the rendering part from the
text display. Use printf-like format string for statusline
customization.

Document printf-like format string to customize the statusline.

Allow to completely mute the statusline (except for push notifications)
with a format specifier.

Provide a display mode with unicode icons for the status elements.

Implements: https://todo.sr.ht/~rjarry/aerc/34
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
2022-04-25 11:21:07 +02:00

74 lines
1.1 KiB
Go

package statusline
import "strings"
type Texter interface {
Connected() string
Disconnected() string
Passthrough() string
Sorting() string
Threading() string
FormatFilter(string) string
FormatSearch(string) string
}
type text struct{}
func (t text) Connected() string {
return "Connected"
}
func (t text) Disconnected() string {
return "Disconnected"
}
func (t text) Passthrough() string {
return "passthrough"
}
func (t text) Sorting() string {
return "sorting"
}
func (t text) Threading() string {
return "threading"
}
func (t text) FormatFilter(s string) string {
return s
}
func (t text) FormatSearch(s string) string {
return s
}
type icon struct{}
func (i icon) Connected() string {
return "✓"
}
func (i icon) Disconnected() string {
return "✘"
}
func (i icon) Passthrough() string {
return "➔"
}
func (i icon) Sorting() string {
return "⚙"
}
func (i icon) Threading() string {
return "🧵"
}
func (i icon) FormatFilter(s string) string {
return strings.ReplaceAll(s, "filter", "🔦")
}
func (i icon) FormatSearch(s string) string {
return strings.ReplaceAll(s, "search", "🔎")
}