From a57d29ada9db191a46a569d5203dc600ab2f76ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6ran=20Karl?= <3951388+JoeKar@users.noreply.github.com> Date: Fri, 22 Mar 2024 20:47:30 +0100 Subject: [PATCH] command: Fix `reload` command to correctly initialize and reload all runtime files (#3062) * rtfiles: Initialize all-/realFiles and Plugins in InitRuntimeFiles * command: Reload plugins at ReloadCmd too * command: Don't reload plugins in case of ReloadConfig() * rtfiles: Split InitRuntimeFiles() into one func for assets and one for plugins * rtfiles: Remove the unnecessary init function With this modification the InitRuntimeFiles() and InitPlugins() (if needed) must be called first, otherwise uninitialized runtime file variables are most likely. --- cmd/micro/micro.go | 2 ++ cmd/micro/micro_test.go | 2 ++ internal/action/command.go | 45 ++++++++++++++++++++++++++++++--- internal/buffer/buffer_test.go | 2 ++ internal/buffer/settings.go | 2 +- internal/config/rtfiles.go | 9 ++++++- internal/config/rtfiles_test.go | 1 + 7 files changed, 58 insertions(+), 5 deletions(-) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 818c70275..225dfc850 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 ba5c9a24b..7ee521cb7 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 0f41c853f..19962ce72 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 305d16274..167144264 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 ce9abf3ec..52cbafdb6 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 275831cf7..53820c5f7 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 de6525ef2..694e4686e 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) {