mirror of
https://github.com/zyedidia/micro.git
synced 2026-02-04 14:10:23 +09:00
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:
@@ -255,6 +255,8 @@ func main() {
|
||||
}
|
||||
|
||||
config.InitRuntimeFiles()
|
||||
config.InitPlugins()
|
||||
|
||||
err = config.ReadSettings()
|
||||
if err != nil {
|
||||
screen.TermMessage(err)
|
||||
|
||||
@@ -36,6 +36,8 @@ func startup(args []string) (tcell.SimulationScreen, error) {
|
||||
}
|
||||
|
||||
config.InitRuntimeFiles()
|
||||
config.InitPlugins()
|
||||
|
||||
err = config.ReadSettings()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -74,7 +74,7 @@ func (b *Buffer) SetOptionNative(option string, nativeValue interface{}) error {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if b.OptionCallback != nil {
|
||||
b.OptionCallback(option, nativeValue)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
func init() {
|
||||
InitRuntimeFiles()
|
||||
InitPlugins()
|
||||
}
|
||||
|
||||
func TestAddFile(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user