From 93bf686b9da6db4fbb262256bccfe64cdbf889f5 Mon Sep 17 00:00:00 2001 From: Menno Finlay-Smits Date: Tue, 12 Mar 2019 14:20:33 +1300 Subject: [PATCH] Make DefaultConfig safer Instead of having a global mutable DefaultConfig which might be changed by anything during run/test time turn DefaultConfig into a function which returns a fresh DefaultConfig. This is safer and more convenient. --- config.go | 10 +++--- config/config.go | 6 ++-- config/defaults.go | 78 ++++++++++++++++++++++------------------------ 3 files changed, 46 insertions(+), 48 deletions(-) diff --git a/config.go b/config.go index b0c54c0..5f0cf2b 100644 --- a/config.go +++ b/config.go @@ -53,7 +53,7 @@ func getConfig() *config.Config { var conf *config.Config if ignoreConfig { - conf = &config.DefaultConfig + conf = config.DefaultConfig() } else { conf = loadConfigFile() } @@ -83,12 +83,12 @@ func loadConfigFile() *config.Config { usr, err := user.Current() if err != nil { fmt.Printf("Failed to get current user information: %s\n", err) - return &config.DefaultConfig + return config.DefaultConfig() } home := usr.HomeDir if home == "" { - return &config.DefaultConfig + return config.DefaultConfig() } places := []string{} @@ -111,7 +111,7 @@ func loadConfigFile() *config.Config { } } - if b, err := config.DefaultConfig.Encode(); err != nil { + if b, err := config.DefaultConfig().Encode(); err != nil { fmt.Printf("Failed to encode config file: %s\n", err) } else { err = os.MkdirAll(filepath.Dir(places[0]), 0744) @@ -124,5 +124,5 @@ func loadConfigFile() *config.Config { } } - return &config.DefaultConfig + return config.DefaultConfig() } diff --git a/config/config.go b/config/config.go index 92e187f..11add72 100644 --- a/config/config.go +++ b/config/config.go @@ -24,12 +24,12 @@ type Config struct { type KeyMappingConfig map[string]string func Parse(data []byte) (*Config, error) { - c := DefaultConfig - err := toml.Unmarshal(data, &c) + c := DefaultConfig() + err := toml.Unmarshal(data, c) if c.KeyMapping == nil { c.KeyMapping = KeyMappingConfig(map[string]string{}) } - return &c, err + return c, err } func (c *Config) Encode() ([]byte, error) { diff --git a/config/defaults.go b/config/defaults.go index bc0557c..31eb279 100644 --- a/config/defaults.go +++ b/config/defaults.go @@ -2,52 +2,50 @@ package config import "runtime" -var DefaultConfig = Config{ - DebugMode: false, - ColourScheme: ColourScheme{ - Cursor: strToColourNoErr("#e8dfd6"), - Foreground: strToColourNoErr("#e8dfd6"), - Background: strToColourNoErr("#021b21"), - Black: strToColourNoErr("#000000"), - Red: strToColourNoErr("#800000"), - Green: strToColourNoErr("#008000"), - Yellow: strToColourNoErr("#808000"), - Blue: strToColourNoErr("#000080"), - Magenta: strToColourNoErr("#800080"), - Cyan: strToColourNoErr("#008080"), - LightGrey: strToColourNoErr("#f2f2f2"), - DarkGrey: strToColourNoErr("#808080"), - LightRed: strToColourNoErr("#ff0000"), - LightGreen: strToColourNoErr("#00ff00"), - LightYellow: strToColourNoErr("#ffff00"), - LightBlue: strToColourNoErr("#0000ff"), - LightMagenta: strToColourNoErr("#ff00ff"), - LightCyan: strToColourNoErr("#00ffff"), - White: strToColourNoErr("#ffffff"), - Selection: strToColourNoErr("#333366"), - }, - KeyMapping: KeyMappingConfig(map[string]string{}), - SearchURL: "https://www.google.com/search?q=$QUERY", - MaxLines: 1000, - CopyAndPasteWithMouse: true, -} - -func init() { - DefaultConfig.KeyMapping[string(ActionCopy)] = addMod("c") - DefaultConfig.KeyMapping[string(ActionPaste)] = addMod("v") - DefaultConfig.KeyMapping[string(ActionSearch)] = addMod("g") - DefaultConfig.KeyMapping[string(ActionToggleDebug)] = addMod("d") - DefaultConfig.KeyMapping[string(ActionToggleSlomo)] = addMod(";") - DefaultConfig.KeyMapping[string(ActionReportBug)] = addMod("r") - DefaultConfig.KeyMapping[string(ActionBufferClear)] = addMod("k") +func DefaultConfig() *Config { + return &Config{ + DebugMode: false, + ColourScheme: ColourScheme{ + Cursor: strToColourNoErr("#e8dfd6"), + Foreground: strToColourNoErr("#e8dfd6"), + Background: strToColourNoErr("#021b21"), + Black: strToColourNoErr("#000000"), + Red: strToColourNoErr("#800000"), + Green: strToColourNoErr("#008000"), + Yellow: strToColourNoErr("#808000"), + Blue: strToColourNoErr("#000080"), + Magenta: strToColourNoErr("#800080"), + Cyan: strToColourNoErr("#008080"), + LightGrey: strToColourNoErr("#f2f2f2"), + DarkGrey: strToColourNoErr("#808080"), + LightRed: strToColourNoErr("#ff0000"), + LightGreen: strToColourNoErr("#00ff00"), + LightYellow: strToColourNoErr("#ffff00"), + LightBlue: strToColourNoErr("#0000ff"), + LightMagenta: strToColourNoErr("#ff00ff"), + LightCyan: strToColourNoErr("#00ffff"), + White: strToColourNoErr("#ffffff"), + Selection: strToColourNoErr("#333366"), + }, + KeyMapping: KeyMappingConfig(map[string]string{ + string(ActionCopy): addMod("c"), + string(ActionPaste): addMod("v"), + string(ActionSearch): addMod("g"), + string(ActionToggleDebug): addMod("d"), + string(ActionToggleSlomo): addMod(";"), + string(ActionReportBug): addMod("r"), + string(ActionBufferClear): addMod("k"), + }), + SearchURL: "https://www.google.com/search?q=$QUERY", + MaxLines: 1000, + CopyAndPasteWithMouse: true, + } } func addMod(keys string) string { standardMod := "ctrl + shift + " - if runtime.GOOS == "darwin" { standardMod = "super + " } - return standardMod + keys }