From ae05ff1811a31b82caca0f9388aedacd792d3b03 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Mon, 8 Jun 2020 15:33:38 -0400 Subject: [PATCH 1/2] settings.json only contains modified settings If a setting has a default value it will not be listed in settings.json. --- internal/config/settings.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/internal/config/settings.go b/internal/config/settings.go index a306389c..c35878ea 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -148,8 +148,23 @@ func InitLocalSettings(settings map[string]interface{}, path string) error { func WriteSettings(filename string) error { var err error if _, e := os.Stat(ConfigDir); e == nil { + defaults := DefaultGlobalSettings() + + // remove any options froms parsedSettings that have since been marked as default + for k, v := range parsedSettings { + if !strings.HasPrefix(reflect.TypeOf(v).String(), "map") { + cur, okcur := GlobalSettings[k] + if def, ok := defaults[k]; ok && okcur && reflect.DeepEqual(cur, def) { + delete(parsedSettings, k) + } + } + } + + // add any options to parsedSettings that have since been marked as non-default for k, v := range GlobalSettings { - parsedSettings[k] = v + if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { + parsedSettings[k] = v + } } txt, _ := json.MarshalIndent(parsedSettings, "", " ") @@ -158,10 +173,21 @@ func WriteSettings(filename string) error { return err } +// OverwriteSettings writes the current settings to settings.json and +// resets any user configuration of local settings present in settings.json func OverwriteSettings(filename string) error { + settings := make(map[string]interface{}) + var err error if _, e := os.Stat(ConfigDir); e == nil { - txt, _ := json.MarshalIndent(GlobalSettings, "", " ") + defaults := DefaultGlobalSettings() + for k, v := range GlobalSettings { + if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { + settings[k] = v + } + } + + txt, _ := json.MarshalIndent(settings, "", " ") err = ioutil.WriteFile(filename, append(txt, '\n'), 0644) } return err From 660d345880fc32c8403f0bd2d82f2ed907f54621 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Mon, 8 Jun 2020 22:19:15 -0400 Subject: [PATCH 2/2] Don't apply cli options to settings.json --- internal/action/command.go | 1 + internal/config/settings.go | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/internal/action/command.go b/internal/action/command.go index 8034f291..90792a26 100644 --- a/internal/action/command.go +++ b/internal/action/command.go @@ -480,6 +480,7 @@ func SetGlobalOptionNative(option string, nativeValue interface{}) error { if !local { config.GlobalSettings[option] = nativeValue + config.ModifiedSettings[option] = true if option == "colorscheme" { // LoadSyntaxFiles() diff --git a/internal/config/settings.go b/internal/config/settings.go index c35878ea..55aed63e 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -28,9 +28,14 @@ var ( // This is the raw parsed json parsedSettings map[string]interface{} + + // ModifiedSettings is a map of settings which should be written to disk + // because they have been modified by the user in this session + ModifiedSettings map[string]bool ) func init() { + ModifiedSettings = make(map[string]bool) parsedSettings = make(map[string]interface{}) } @@ -163,7 +168,9 @@ func WriteSettings(filename string) error { // add any options to parsedSettings that have since been marked as non-default for k, v := range GlobalSettings { if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { - parsedSettings[k] = v + if _, wr := ModifiedSettings[k]; wr { + parsedSettings[k] = v + } } } @@ -183,7 +190,9 @@ func OverwriteSettings(filename string) error { defaults := DefaultGlobalSettings() for k, v := range GlobalSettings { if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) { - settings[k] = v + if _, wr := ModifiedSettings[k]; wr { + settings[k] = v + } } }