~sircmpwn/aerc

config: Strongly type context type v2 PROPOSED

Reto Brunner: 1
 config: Strongly type context type

 3 files changed, 10 insertions(+), 7 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~sircmpwn/aerc/patches/9605/mbox | git am -3
Learn more about email & git

[PATCH v2] config: Strongly type context type Export this patch

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.
---
 config/config.go   | 11 +++++++----
 widgets/account.go |  4 ++--
 widgets/msglist.go |  2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/config/config.go b/config/config.go
index 0b46014..0393e46 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 66320a3..455c28e 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 24a9940..9aff0d4 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,
-- 
2.25.0
Thanks!

To git.sr.ht:~sircmpwn/aerc
   df5d9a3..e78b7b8  master -> master
View this thread in the archives