-// RegisterCommonOption creates a new option. This is meant to be called by plugins to add options.
-func RegisterCommonOption(name string, defaultvalue interface{}) error {
- if v, ok := GlobalSettings[name]; !ok {
+// 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 {
+ defaults := DefaultGlobalSettings()
+ for k, v := range GlobalSettings {
+ if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) {
+ if _, wr := ModifiedSettings[k]; wr {
+ settings[k] = v
+ }
+ }
+ }
+
+ txt, _ := json.MarshalIndent(settings, "", " ")
+ err = ioutil.WriteFile(filename, append(txt, '\n'), 0644)
+ }
+ return err
+}
+
+// RegisterCommonOptionPlug creates a new option (called pl.name). This is meant to be called by plugins to add options.
+func RegisterCommonOptionPlug(pl string, name string, defaultvalue interface{}) error {
+ name = pl + "." + name
+ if _, ok := GlobalSettings[name]; !ok {