From 603cec9d81ddb8d92539aa1ff48e15cd7f66b81e Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Tue, 26 Apr 2016 16:20:26 -0400 Subject: [PATCH] Load plugins from ~/.config/micro/plugins --- cmd/micro/bindings.go | 17 +++++++++-------- cmd/micro/micro.go | 5 +---- cmd/micro/plugin.go | 26 ++++++++++++++++++++++++++ cmd/micro/plugin.lua | 29 ----------------------------- 4 files changed, 36 insertions(+), 41 deletions(-) create mode 100644 cmd/micro/plugin.go delete mode 100644 cmd/micro/plugin.lua diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index bacf584e..d02aab82 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -620,14 +620,15 @@ func (v *View) Save() bool { v.GoSave() } } - if err := L.CallByParam(lua.P{ - Fn: L.GetGlobal("onSave"), - NRet: 0, - Protect: true, - }); err != nil { - // The function isn't defined by this plugin - messenger.Error(err) - return true + for _, pl := range loadedPlugins { + if err := L.CallByParam(lua.P{ + Fn: L.GetGlobal(pl + "_onSave"), + NRet: 0, + Protect: true, + }); err != nil { + // The function isn't defined by this plugin + messenger.Error(err) + } } return true } diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 2a380aa9..26ab46ef 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -183,10 +183,6 @@ func main() { L = lua.NewState() defer L.Close() - if err := L.DoFile("plugin.lua"); err != nil { - panic(err) - } - encoding.Register() tcell.SetEncodingFallback(tcell.EncodingFallbackASCII) @@ -199,6 +195,7 @@ func main() { LoadSyntaxFiles() // Load the help files LoadHelp() + LoadPlugins() buf := NewBuffer(string(input), filename) diff --git a/cmd/micro/plugin.go b/cmd/micro/plugin.go new file mode 100644 index 00000000..add2476a --- /dev/null +++ b/cmd/micro/plugin.go @@ -0,0 +1,26 @@ +package main + +import ( + "io/ioutil" +) + +var loadedPlugins []string + +func LoadPlugins() { + files, _ := ioutil.ReadDir(configDir + "/plugins") + for _, plugin := range files { + if plugin.IsDir() { + pluginName := plugin.Name() + files, _ := ioutil.ReadDir(configDir + "/plugins/" + pluginName) + for _, f := range files { + if f.Name() == pluginName+".lua" { + if err := L.DoFile(configDir + "/plugins/" + pluginName + "/" + f.Name()); err != nil { + TermMessage(err) + continue + } + loadedPlugins = append(loadedPlugins, pluginName) + } + } + } + } +} diff --git a/cmd/micro/plugin.lua b/cmd/micro/plugin.lua deleted file mode 100644 index 68407502..00000000 --- a/cmd/micro/plugin.lua +++ /dev/null @@ -1,29 +0,0 @@ -go = {} - -function onSave() - if settings.GoImports then - messenger:Message("Running goimports...") - go.goimports() - elseif settings.GoFmt then - messenger:Message("Running gofmt...") - go.gofmt() - end -end - -function go.gofmt() - local handle = io.popen("gofmt -w " .. view.Buf.Path) - local result = handle:read("*a") - handle:close() - - view:ReOpen() - messenger:Message(result) -end - -function go.goimports() - local handle = io.popen("goimports -w " .. view.Buf.Path) - local result = handle:read("*a") - handle:close() - - view:ReOpen() - messenger:Message(result) -end