"time"
"github.com/mitchellh/go-homedir"
- "github.com/yuin/gopher-lua"
"github.com/zyedidia/clipboard"
"github.com/zyedidia/tcell"
)
} else {
messenger.Message("Saved " + v.Buf.Path)
}
- 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
}
package main
import (
+ "github.com/yuin/gopher-lua"
"io/ioutil"
)
"go",
}
+// Call calls the lua function 'function'
+// If it does not exist nothing happens, if there is an error,
+// the error is returned
+func Call(function string) error {
+ luaFunc := L.GetGlobal(function)
+ if luaFunc.String() == "nil" {
+ return nil
+ }
+ err := L.CallByParam(lua.P{
+ Fn: luaFunc,
+ NRet: 0,
+ Protect: true,
+ })
+ return err
+}
+
// LoadPlugins loads the pre-installed plugins and the plugins located in ~/.config/micro/plugins
func LoadPlugins() {
files, _ := ioutil.ReadDir(configDir + "/plugins")
import (
"io/ioutil"
+ "reflect"
+ "runtime"
"strconv"
"strings"
"time"
for key, action := range bindings {
if e.Key() == key {
relocate = action(v)
+ for _, pl := range loadedPlugins {
+ funcName := strings.Split(runtime.FuncForPC(reflect.ValueOf(action).Pointer()).Name(), ".")
+ err := Call(pl + "_on" + funcName[len(funcName)-1])
+ if err != nil {
+ TermMessage(err)
+ }
+ }
}
}
}