aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2020-01-24 18:18:49 +0100
committerDrew DeVault <sir@cmpwn.com>2020-01-24 12:25:59 -0500
commite78b7b85e4792f413175e13ef2fe437839b017a2 (patch)
tree0e050469f2f3d7768d4cc8f39af27a580d03e7b1
parentdf5d9a3ec7564f0d95e3f92afc0e59588de3c4ce (diff)
downloadaerc-e78b7b85e4792f413175e13ef2fe437839b017a2.tar.gz
config: Strongly type context type
The go compiler can't help much with untyped int constants. Even though the only valid constants are 0-3 it will happily accept 4 as input. Let's let the go compiler worry about correctness here. This also allows people not very familiar with the code to use it properly via auto completion.
-rw-r--r--config/config.go11
-rw-r--r--widgets/account.go4
-rw-r--r--widgets/msglist.go2
3 files changed, 10 insertions, 7 deletions
diff --git a/config/config.go b/config/config.go
index 0b46014e..0393e467 100644
--- a/config/config.go
+++ b/config/config.go
@@ -46,14 +46,16 @@ type UIConfig struct {
CompletionPopovers bool `ini:"completion-popovers"`
}
+type ContextType int
+
const (
- UI_CONTEXT_FOLDER = iota
+ UI_CONTEXT_FOLDER ContextType = iota
UI_CONTEXT_ACCOUNT
UI_CONTEXT_SUBJECT
)
type UIConfigContext struct {
- ContextType int
+ ContextType ContextType
Regex *regexp.Regexp
UiConfig UIConfig
}
@@ -602,7 +604,8 @@ func parseLayout(layout string) [][]string {
return l
}
-func (config *AercConfig) mergeContextualUi(baseUi *UIConfig, contextType int, s string) {
+func (config *AercConfig) mergeContextualUi(baseUi *UIConfig,
+ contextType ContextType, s string) {
for _, contextualUi := range config.ContextualUis {
if contextualUi.ContextType != contextType {
continue
@@ -617,7 +620,7 @@ func (config *AercConfig) mergeContextualUi(baseUi *UIConfig, contextType int, s
}
}
-func (config *AercConfig) GetUiConfig(params map[int]string) UIConfig {
+func (config *AercConfig) GetUiConfig(params map[ContextType]string) UIConfig {
baseUi := config.Ui
for k, v := range params {
diff --git a/widgets/account.go b/widgets/account.go
index 66320a3c..455c28ec 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -32,7 +32,7 @@ type AccountView struct {
}
func (acct *AccountView) UiConfig() config.UIConfig {
- return acct.conf.GetUiConfig(map[int]string{
+ return acct.conf.GetUiConfig(map[config.ContextType]string{
config.UI_CONTEXT_ACCOUNT: acct.AccountConfig().Name,
config.UI_CONTEXT_FOLDER: acct.Directories().Selected(),
})
@@ -41,7 +41,7 @@ func (acct *AccountView) UiConfig() config.UIConfig {
func NewAccountView(aerc *Aerc, conf *config.AercConfig, acct *config.AccountConfig,
logger *log.Logger, host TabHost) *AccountView {
- acctUiConf := conf.GetUiConfig(map[int]string{
+ acctUiConf := conf.GetUiConfig(map[config.ContextType]string{
config.UI_CONTEXT_ACCOUNT: acct.Name,
})
diff --git a/widgets/msglist.go b/widgets/msglist.go
index 24a99404..9aff0d45 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -106,7 +106,7 @@ func (ml *MessageList) Draw(ctx *ui.Context) {
}
ctx.Fill(0, row, ctx.Width(), 1, ' ', style)
- uiConfig := ml.conf.GetUiConfig(map[int]string{
+ uiConfig := ml.conf.GetUiConfig(map[config.ContextType]string{
config.UI_CONTEXT_ACCOUNT: ml.aerc.SelectedAccount().AccountConfig().Name,
config.UI_CONTEXT_FOLDER: ml.aerc.SelectedAccount().Directories().Selected(),
config.UI_CONTEXT_SUBJECT: msg.Envelope.Subject,