diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 818c7027..225dfc85 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -255,6 +255,8 @@ func main() { } config.InitRuntimeFiles() + config.InitPlugins() + err = config.ReadSettings() if err != nil { screen.TermMessage(err) diff --git a/cmd/micro/micro_test.go b/cmd/micro/micro_test.go index ba5c9a24..7ee521cb 100644 --- a/cmd/micro/micro_test.go +++ b/cmd/micro/micro_test.go @@ -36,6 +36,8 @@ func startup(args []string) (tcell.SimulationScreen, error) { } config.InitRuntimeFiles() + config.InitPlugins() + err = config.ReadSettings() if err != nil { return nil, err diff --git a/internal/action/command.go b/internal/action/command.go index 0f41c853..19962ce7 100644 --- a/internal/action/command.go +++ b/internal/action/command.go @@ -329,13 +329,30 @@ func (h *BufPane) ToggleLogCmd(args []string) { } } -// ReloadCmd reloads all files (syntax files, colorschemes...) +// ReloadCmd reloads all files (syntax files, colorschemes, plugins...) func (h *BufPane) ReloadCmd(args []string) { - ReloadConfig() + reloadRuntime(true) } +// ReloadConfig reloads only the configuration func ReloadConfig() { + reloadRuntime(false) +} + +func reloadRuntime(reloadPlugins bool) { + if reloadPlugins { + err := config.RunPluginFn("deinit") + if err != nil { + screen.TermMessage(err) + } + } + config.InitRuntimeFiles() + + if reloadPlugins { + config.InitPlugins() + } + err := config.ReadSettings() if err != nil { screen.TermMessage(err) @@ -344,14 +361,36 @@ func ReloadConfig() { if err != nil { screen.TermMessage(err) } + + if reloadPlugins { + err = config.LoadAllPlugins() + if err != nil { + screen.TermMessage(err) + } + } + InitBindings() InitCommands() + if reloadPlugins { + err = config.RunPluginFn("preinit") + if err != nil { + screen.TermMessage(err) + } + err = config.RunPluginFn("init") + if err != nil { + screen.TermMessage(err) + } + err = config.RunPluginFn("postinit") + if err != nil { + screen.TermMessage(err) + } + } + err = config.InitColorscheme() if err != nil { screen.TermMessage(err) } - for _, b := range buffer.OpenBuffers { b.UpdateRules() } diff --git a/internal/buffer/buffer_test.go b/internal/buffer/buffer_test.go index 305d1627..16714426 100644 --- a/internal/buffer/buffer_test.go +++ b/internal/buffer/buffer_test.go @@ -20,6 +20,8 @@ type operation struct { func init() { ulua.L = lua.NewState() + config.InitRuntimeFiles() + config.InitPlugins() config.InitGlobalSettings() config.GlobalSettings["backup"] = false config.GlobalSettings["fastdirty"] = true diff --git a/internal/buffer/settings.go b/internal/buffer/settings.go index ce9abf3e..52cbafdb 100644 --- a/internal/buffer/settings.go +++ b/internal/buffer/settings.go @@ -74,7 +74,7 @@ func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error { } } } - } + } if b.OptionCallback != nil { b.OptionCallback(option, nativeValue) diff --git a/internal/config/rtfiles.go b/internal/config/rtfiles.go index 275831cf..53820c5f 100644 --- a/internal/config/rtfiles.go +++ b/internal/config/rtfiles.go @@ -39,7 +39,7 @@ type RuntimeFile interface { var allFiles [][]RuntimeFile var realFiles [][]RuntimeFile -func init() { +func initRuntimeVars() { allFiles = make([][]RuntimeFile, NumTypes) realFiles = make([][]RuntimeFile, NumTypes) } @@ -173,12 +173,19 @@ func InitRuntimeFiles() { AddRuntimeFilesFromAssets(fileType, path.Join("runtime", dir), pattern) } + initRuntimeVars() + add(RTColorscheme, "colorschemes", "*.micro") add(RTSyntax, "syntax", "*.yaml") add(RTSyntaxHeader, "syntax", "*.hdr") add(RTHelp, "help", "*.md") +} +// InitPlugins initializes the plugins +func InitPlugins() { + Plugins = Plugins[:0] initlua := filepath.Join(ConfigDir, "init.lua") + if _, err := os.Stat(initlua); !os.IsNotExist(err) { p := new(Plugin) p.Name = "initlua" diff --git a/internal/config/rtfiles_test.go b/internal/config/rtfiles_test.go index de6525ef..694e4686 100644 --- a/internal/config/rtfiles_test.go +++ b/internal/config/rtfiles_test.go @@ -8,6 +8,7 @@ import ( func init() { InitRuntimeFiles() + InitPlugins() } func TestAddFile(t *testing.T) {