diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 364de446..80803973 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -165,12 +165,14 @@ func NewTab(args []string) { // Set sets an option func Set(args []string) { - // Set an option and we have to set it for every view - for _, tab := range tabs { - for _, view := range tab.views { - SetOption(view, args) - } + if len(args) < 2 { + return } + + option := strings.TrimSpace(args[0]) + value := strings.TrimSpace(args[1]) + + SetOption(option, value) } // Bind creates a new keybinding diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 1cdcf45e..14312435 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -262,6 +262,7 @@ func main() { L.SetGlobal("messenger", luar.New(L, messenger)) L.SetGlobal("GetOption", luar.New(L, GetOption)) L.SetGlobal("AddOption", luar.New(L, AddOption)) + L.SetGlobal("SetOption", luar.New(L, SetOption)) L.SetGlobal("BindKey", luar.New(L, BindKey)) L.SetGlobal("MakeCommand", luar.New(L, MakeCommand)) L.SetGlobal("CurView", luar.New(L, CurView)) diff --git a/cmd/micro/settings.go b/cmd/micro/settings.go index 23410fc7..4df44237 100644 --- a/cmd/micro/settings.go +++ b/cmd/micro/settings.go @@ -6,7 +6,6 @@ import ( "os" "reflect" "strconv" - "strings" ) // The options that the user can set @@ -90,51 +89,58 @@ func DefaultSettings() map[string]interface{} { } // SetOption prompts the user to set an option and checks that the response is valid -func SetOption(view *View, args []string) { +func SetOption(option, value string) { filename := configDir + "/settings.json" - if len(args) == 2 { - option := strings.TrimSpace(args[0]) - value := strings.TrimSpace(args[1]) + if _, ok := settings[option]; !ok { + messenger.Error(option + " is not a valid option") + return + } - if _, ok := settings[option]; !ok { - messenger.Error(option + " is not a valid option") - return - } - - kind := reflect.TypeOf(settings[option]).Kind() - if kind == reflect.Bool { - b, err := ParseBool(value) - if err != nil { - messenger.Error("Invalid value for " + option) - return - } - settings[option] = b - } else if kind == reflect.String { - settings[option] = value - } else if kind == reflect.Float64 { - i, err := strconv.Atoi(value) - if err != nil { - messenger.Error("Invalid value for " + option) - return - } - settings[option] = float64(i) - } - - if option == "colorscheme" { - LoadSyntaxFiles() - view.Buf.UpdateRules() - } - - if option == "statusline" { - view.ToggleStatusLine() - } - - err := WriteSettings(filename) + kind := reflect.TypeOf(settings[option]).Kind() + if kind == reflect.Bool { + b, err := ParseBool(value) if err != nil { - messenger.Error("Error writing to settings.json: " + err.Error()) + messenger.Error("Invalid value for " + option) return } - } else { - messenger.Error("No value given") + settings[option] = b + } else if kind == reflect.String { + settings[option] = value + } else if kind == reflect.Float64 { + i, err := strconv.Atoi(value) + if err != nil { + messenger.Error("Invalid value for " + option) + return + } + settings[option] = float64(i) + } + + if option == "colorscheme" { + LoadSyntaxFiles() + for _, tab := range tabs { + for _, view := range tab.views { + view.Buf.UpdateRules() + if settings["syntax"].(bool) { + view.matches = Match(view) + } + } + } + } + + if option == "statusline" { + for _, tab := range tabs { + for _, view := range tab.views { + view.ToggleStatusLine() + if settings["syntax"].(bool) { + view.matches = Match(view) + } + } + } + } + + err := WriteSettings(filename) + if err != nil { + messenger.Error("Error writing to settings.json: " + err.Error()) + return } }