package main
import (
- "github.com/yuin/gopher-lua"
+ "errors"
"io/ioutil"
+
+ "github.com/layeh/gopher-luar"
+ "github.com/yuin/gopher-lua"
)
var loadedPlugins []string
var preInstalledPlugins = []string{
"go",
+ "linter",
}
// 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 {
+func Call(function string, args []string) error {
luaFunc := L.GetGlobal(function)
if luaFunc.String() == "nil" {
- return nil
+ return errors.New("function does not exist: " + function)
}
+ luaArgs := luar.New(L, args)
err := L.CallByParam(lua.P{
Fn: luaFunc,
NRet: 0,
Protect: true,
- })
+ }, luaArgs)
return err
}
+// LuaFunctionBinding is a function generator which takes the name of a lua function
+// and creates a function that will call that lua function
+// Specifically it creates a function that can be called as a binding because this is used
+// to bind keys to lua functions
+func LuaFunctionBinding(function string) func(*View) bool {
+ return func(v *View) bool {
+ err := Call(function, nil)
+ if err != nil {
+ TermMessage(err)
+ }
+ return false
+ }
+}
+
+// LuaFunctionCommand is the same as LuaFunctionBinding except it returns a normal function
+// so that a command can be bound to a lua function
+func LuaFunctionCommand(function string) func([]string) {
+ return func(args []string) {
+ err := Call(function, args)
+ if err != nil {
+ TermMessage(err)
+ }
+ }
+}
+
// LoadPlugins loads the pre-installed plugins and the plugins located in ~/.config/micro/plugins
func LoadPlugins() {
files, _ := ioutil.ReadDir(configDir + "/plugins")