diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-01-09 19:18:19 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2018-01-09 19:28:43 -0500 |
commit | 39c93d2897af5bb0c145ef4f99f542bf42babdab (patch) | |
tree | 4a3d3ac3553b2d2f31960a7af35ea286b62597d7 /config/config.go | |
parent | aeb700577b5b2955c75093129e01de49b92f124f (diff) | |
download | aerc-39c93d2897af5bb0c145ef4f99f542bf42babdab.tar.gz |
Load UI configuration
Diffstat (limited to 'config/config.go')
-rw-r--r-- | config/config.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..b620258 --- /dev/null +++ b/config/config.go @@ -0,0 +1,85 @@ +package config + +import ( + "github.com/go-ini/ini" + "github.com/kyoh86/xdg" + + "path" + "unicode" +) + +type UIConfig struct { + IndexFormat string + TimestampFormat string + ShowHeaders []string `delim:","` + LoadingFrames []string `delim:","` + RenderAccountTabs string + SidebarWidth int + PreviewHeight int + EmptyMessage string +} + +type AccountConfig struct { + ConfigPath string + Name string + Source string + Folders []string + Params map[string]string +} + +type AercConfig struct { + Ini *ini.File `ini:"-"` + Accounts []AccountConfig `ini:"-"` + Ui UIConfig +} + +// Input: TimestampFormat +// Output: timestamp-format +func mapName(raw string) string { + newstr := make([]rune, 0, len(raw)) + for i, chr := range raw { + if isUpper := 'A' <= chr && chr <= 'Z'; isUpper { + if i > 0 { + newstr = append(newstr, '-') + } + } + newstr = append(newstr, unicode.ToLower(chr)) + } + return string(newstr) +} + +func LoadConfig(root *string) (*AercConfig, error) { + var ( + err error + file *ini.File + ) + if root == nil { + _root := path.Join(xdg.ConfigHome(), "aerc") + root = &_root + } + if file, err = ini.Load(path.Join(*root, "aerc.conf")); err != nil { + return nil, err + } + file.NameMapper = mapName + config := &AercConfig{ + Ini: file, + Ui: UIConfig{ + IndexFormat: "%4C %Z %D %-17.17n %s", + TimestampFormat: "%F %l:%M %p", + ShowHeaders: []string{ + "From", "To", "Cc", "Bcc", "Subject", "Date", + }, + LoadingFrames: []string{ + "[..] ", " [..] ", " [..]", " [..] ", + }, + RenderAccountTabs: "auto", + SidebarWidth: 20, + PreviewHeight: 12, + EmptyMessage: "(no messages)", + }, + } + if ui, err := file.GetSection("ui"); err != nil { + ui.MapTo(config.Ui) + } + return config, nil +} |