6 lua "github.com/yuin/gopher-lua"
7 ulua "github.com/zyedidia/micro/internal/lua"
10 var ErrNoSuchFunction = errors.New("No such function exists")
12 // LoadAllPlugins loads all detected plugins (in runtime/plugins and ConfigDir/plugins)
13 func LoadAllPlugins() {
14 for _, p := range Plugins {
19 // RunPluginFn runs a given function in all plugins
20 // returns an error if any of the plugins had an error
21 func RunPluginFn(fn string, args ...lua.LValue) error {
23 for _, p := range Plugins {
27 _, err := p.Call(fn, args...)
28 if err != nil && err != ErrNoSuchFunction {
29 reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
35 // RunPluginFnBool runs a function in all plugins and returns
36 // false if any one of them returned false
37 // also returns an error if any of the plugins had an error
38 func RunPluginFnBool(fn string, args ...lua.LValue) (bool, error) {
41 for _, p := range Plugins {
45 val, err := p.Call(fn, args...)
46 if err == ErrNoSuchFunction {
50 reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
53 if v, ok := val.(lua.LBool); !ok {
54 reterr = errors.New(p.Name + "." + fn + " should return a boolean")
56 retbool = retbool && bool(v)
59 return retbool, reterr
63 Name string // name of plugin
64 Info RuntimeFile // json file containing info
65 Srcs []RuntimeFile // lua files
69 func (p *Plugin) IsEnabled() bool {
70 if v, ok := GlobalSettings[p.Name]; ok {
78 func (p *Plugin) Load() error {
79 for _, f := range p.Srcs {
87 err = ulua.LoadFile(p.Name, f.Name(), dat)
92 if _, ok := GlobalSettings[p.Name]; !ok {
93 AddOption(p.Name, true)
99 func (p *Plugin) Call(fn string, args ...lua.LValue) (lua.LValue, error) {
100 plug := ulua.L.GetGlobal(p.Name)
101 luafn := ulua.L.GetField(plug, fn)
102 if luafn == lua.LNil {
103 return nil, ErrNoSuchFunction
105 err := ulua.L.CallByParam(lua.P{
113 ret := ulua.L.Get(-1)
118 func FindPlugin(name string) *Plugin {
120 for _, p := range Plugins {