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.
This commit is contained in:
Jöran Karl
2024-03-22 20:47:30 +01:00
committed by GitHub
parent bb1f4dad77
commit a57d29ada9
7 changed files with 58 additions and 5 deletions

View File

@@ -255,6 +255,8 @@ func main() {
}
config.InitRuntimeFiles()
config.InitPlugins()
err = config.ReadSettings()
if err != nil {
screen.TermMessage(err)

View File

@@ -36,6 +36,8 @@ func startup(args []string) (tcell.SimulationScreen, error) {
}
config.InitRuntimeFiles()
config.InitPlugins()
err = config.ReadSettings()
if err != nil {
return nil, err

View File

@@ -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()
}

View File

@@ -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

View File

@@ -74,7 +74,7 @@ func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error {
}
}
}
}
}
if b.OptionCallback != nil {
b.OptionCallback(option, nativeValue)

View File

@@ -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"

View File

@@ -8,6 +8,7 @@ import (
func init() {
InitRuntimeFiles()
InitPlugins()
}
func TestAddFile(t *testing.T) {