"errors"
"io/ioutil"
"os"
+ "path/filepath"
"reflect"
"strconv"
"strings"
// Options with validators
var optionValidators = map[string]optionValidator{
- // "autosave": validateNonNegativeValue,
+ "autosave": validateNonNegativeValue,
"tabsize": validatePositiveValue,
"scrollmargin": validateNonNegativeValue,
"scrollspeed": validateNonNegativeValue,
}
func ReadSettings() error {
- filename := ConfigDir + "/settings.json"
+ filename := filepath.Join(ConfigDir, "settings.json")
if _, e := os.Stat(filename); e == nil {
input, err := ioutil.ReadFile(filename)
if err != nil {
if err != nil {
return errors.New("Error reading settings.json: " + err.Error())
}
+
+ // check if autosave is a boolean and convert it to float if so
+ if v, ok := parsedSettings["autosave"]; ok {
+ s, ok := v.(bool)
+ if ok {
+ if s {
+ parsedSettings["autosave"] = 8.0
+ } else {
+ parsedSettings["autosave"] = 0.0
+ }
+ }
+ }
}
}
return nil
return err
}
-// RegisterCommonOption creates a new option. This is meant to be called by plugins to add options.
-func RegisterCommonOption(name string, defaultvalue interface{}) error {
+func OverwriteSettings(filename string) error {
+ var err error
+ if _, e := os.Stat(ConfigDir); e == nil {
+ txt, _ := json.MarshalIndent(GlobalSettings, "", " ")
+ 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 v, ok := GlobalSettings[name]; !ok {
defaultCommonSettings[name] = defaultvalue
GlobalSettings[name] = defaultvalue
- err := WriteSettings(ConfigDir + "/settings.json")
+ err := WriteSettings(filepath.Join(ConfigDir, "/settings.json"))
if err != nil {
return errors.New("Error writing settings.json file: " + err.Error())
}
return nil
}
+// RegisterGlobalOptionPlug creates a new global-only option (named pl.name)
+func RegisterGlobalOptionPlug(pl string, name string, defaultvalue interface{}) error {
+ return RegisterGlobalOption(pl+"."+name, defaultvalue)
+}
+
+// RegisterGlobalOption creates a new global-only option
func RegisterGlobalOption(name string, defaultvalue interface{}) error {
if v, ok := GlobalSettings[name]; !ok {
defaultGlobalSettings[name] = defaultvalue
GlobalSettings[name] = defaultvalue
- err := WriteSettings(ConfigDir + "/settings.json")
+ err := WriteSettings(filepath.Join(ConfigDir, "settings.json"))
if err != nil {
return errors.New("Error writing settings.json file: " + err.Error())
}
"basename": false,
"colorcolumn": float64(0),
"cursorline": true,
+ "diffgutter": false,
"encoding": "utf-8",
"eofnewline": false,
"fastdirty": true,
"softwrap": false,
"splitbottom": true,
"splitright": true,
- "statusformatl": "$(filename) $(modified)($(line),$(col)) | ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding)",
+ "statusformatl": "$(filename) $(modified)($(line),$(col)) $(status.paste)| ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding)",
"statusformatr": "$(bind:ToggleKeyMenu): bindings, $(bind:ToggleHelp): help",
"statusline": true,
"syntax": true,
// a list of settings that should only be globally modified and their
// default values
var defaultGlobalSettings = map[string]interface{}{
- // "autosave": float64(0),
- "colorscheme": "default",
- "infobar": true,
- "keymenu": false,
- "mouse": true,
- "paste": false,
- "savehistory": true,
- "sucmd": "sudo",
+ "autosave": float64(0),
+ "colorscheme": "default",
+ "infobar": true,
+ "keymenu": false,
+ "mouse": true,
+ "paste": false,
+ "savehistory": true,
+ "sucmd": "sudo",
+ "pluginchannels": []string{"https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json"},
+ "pluginrepos": []string{},
}
// a list of settings that should never be globally modified
var LocalSettings = []string{
- "fileformat",
"filetype",
"readonly",
}