// InitSettings initializes the options map and sets all options to their default values
func InitSettings() {
- settings = make(map[string]interface{})
+ defaults := DefaultSettings()
+ var parsed map[string]interface{}
+
filename := configDir + "/settings.json"
if _, e := os.Stat(filename); e == nil {
input, err := ioutil.ReadFile(filename)
return
}
- err = json.Unmarshal(input, &settings)
+ err = json.Unmarshal(input, &parsed)
if err != nil {
TermMessage("Error reading settings.json:", err.Error())
}
- } else {
- settings = DefaultSettings()
- err := WriteSettings(filename)
- if err != nil {
- TermMessage("Error writing settings.json file: " + err.Error())
- }
+ }
+
+ settings = make(map[string]interface{})
+ for k, v := range defaults {
+ settings[k] = v
+ }
+ for k, v := range parsed {
+ settings[k] = v
+ }
+
+ err := WriteSettings(filename)
+ if err != nil {
+ TermMessage("Error writing settings.json file: " + err.Error())
}
}
return err
}
+// AddOption creates a new option. This is meant to be called by plugins to add options.
+func AddOption(name string, value interface{}) {
+ settings[name] = value
+ err := WriteSettings(configDir + "/settings.json")
+ if err != nil {
+ TermMessage("Error writing settings.json file: " + err.Error())
+ }
+}
+
+// GetOption returns the specified option. This is meant to be called by plugins to add options.
+func GetOption(name string) interface{} {
+ return settings[name]
+}
+
// DefaultSettings returns the default settings for micro
func DefaultSettings() map[string]interface{} {
return map[string]interface{}{
- "colorscheme": "default",
- "tabsize": 4,
- "autoindent": true,
- "syntax": true,
- "tabsToSpaces": false,
- "ruler": true,
- "gofmt": false,
- "goimports": false,
+ "autoindent": true,
+ "colorscheme": "default",
+ "ignorecase": false,
+ "indentchar": " ",
+ "ruler": true,
+ "scrollspeed": float64(2),
+ "scrollmargin": float64(3),
+ "statusline": true,
+ "syntax": true,
+ "tabsize": float64(4),
+ "tabstospaces": false,
+ "undothreshold": float64(500),
}
}
if option == "colorscheme" {
LoadSyntaxFiles()
- view.buf.UpdateRules()
+ view.Buf.UpdateRules()
+ }
+
+ if option == "statusline" {
+ view.Resize(screen.Size())
}
err := WriteSettings(filename)