diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index e43073b4..7756d588 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -374,11 +374,6 @@ func main() { action.InitBindings() action.InitCommands() - err = config.InitColorscheme() - if err != nil { - screen.TermMessage(err) - } - err = config.RunPluginFn("preinit") if err != nil { screen.TermMessage(err) @@ -407,6 +402,11 @@ func main() { screen.TermMessage(err) } + err = config.InitColorscheme() + if err != nil { + screen.TermMessage(err) + } + if clipErr != nil { log.Println(clipErr, " or change 'clipboard' option") } diff --git a/internal/config/colorscheme.go b/internal/config/colorscheme.go index 5376c845..1058ab52 100644 --- a/internal/config/colorscheme.go +++ b/internal/config/colorscheme.go @@ -55,6 +55,14 @@ func InitColorscheme() error { c, err := LoadDefaultColorscheme() if err == nil { Colorscheme = c + } else { + // The colorscheme setting seems broken (maybe because we have not validated + // it earlier, see comment in verifySetting()). So reset it to the default + // colorscheme and try again. + GlobalSettings["colorscheme"] = DefaultGlobalOnlySettings["colorscheme"] + if c, err2 := LoadDefaultColorscheme(); err2 == nil { + Colorscheme = c + } } return err diff --git a/internal/config/settings.go b/internal/config/settings.go index 837b56ba..9dc1d1fd 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -273,6 +273,12 @@ func verifySetting(option string, value interface{}, def interface{}) error { return fmt.Errorf("Error: setting '%s' has incorrect type (%s), using default value: %v (%s)", option, valType, def, defType) } + if option == "colorscheme" { + // Plugins are not initialized yet, so do not verify if the colorscheme + // exists yet, since the colorscheme may be added by a plugin later. + return nil + } + if err := OptionIsValid(option, value); err != nil { return err }