]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/settings.go
make undothresthold a setting (part 2)
[micro.git] / cmd / micro / settings.go
index 84587b9547f688f5a55a4c2be442f78eb00f81af..8124a801b9f75a9dc8baeda15d3bc885b99720d4 100644 (file)
@@ -14,7 +14,9 @@ var settings map[string]interface{}
 
 // 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)
@@ -23,16 +25,23 @@ func InitSettings() {
                        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())
        }
 }
 
@@ -46,17 +55,35 @@ func WriteSettings(filename string) 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),
        }
 }
 
@@ -93,7 +120,11 @@ func SetOption(view *View, args []string) {
 
                if option == "colorscheme" {
                        LoadSyntaxFiles()
-                       view.buf.UpdateRules()
+                       view.Buf.UpdateRules()
+               }
+
+               if option == "statusline" {
+                       view.Resize(screen.Size())
                }
 
                err := WriteSettings(filename)