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() error {
15 for _, p := range Plugins {
24 // RunPluginFn runs a given function in all plugins
25 // returns an error if any of the plugins had an error
26 func RunPluginFn(fn string, args ...lua.LValue) error {
28 for _, p := range Plugins {
32 _, err := p.Call(fn, args...)
33 if err != nil && err != ErrNoSuchFunction {
34 reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
40 // RunPluginFnBool runs a function in all plugins and returns
41 // false if any one of them returned false
42 // also returns an error if any of the plugins had an error
43 func RunPluginFnBool(fn string, args ...lua.LValue) (bool, error) {
46 for _, p := range Plugins {
50 val, err := p.Call(fn, args...)
51 if err == ErrNoSuchFunction {
55 reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
58 if v, ok := val.(lua.LBool); !ok {
59 reterr = errors.New(p.Name + "." + fn + " should return a boolean")
61 retbool = retbool && bool(v)
64 return retbool, reterr
68 Name string // name of plugin
69 Info RuntimeFile // json file containing info
70 Srcs []RuntimeFile // lua files
74 func (p *Plugin) IsEnabled() bool {
75 if v, ok := GlobalSettings[p.Name]; ok {
76 return v.(bool) && p.Loaded
83 func (p *Plugin) Load() error {
84 for _, f := range p.Srcs {
85 if v, ok := GlobalSettings[p.Name]; ok && !v.(bool) {
92 err = ulua.LoadFile(p.Name, f.Name(), dat)
97 RegisterGlobalOption(p.Name, true)
102 func (p *Plugin) Call(fn string, args ...lua.LValue) (lua.LValue, error) {
103 plug := ulua.L.GetGlobal(p.Name)
104 luafn := ulua.L.GetField(plug, fn)
105 if luafn == lua.LNil {
106 return nil, ErrNoSuchFunction
108 err := ulua.L.CallByParam(lua.P{
116 ret := ulua.L.Get(-1)
121 func FindPlugin(name string) *Plugin {
123 for _, p := range Plugins {