]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/plugin.go
Merge pull request #168 from onodera-punpun/syntax_css
[micro.git] / cmd / micro / plugin.go
index 242a49f7ca2d68942a60a83da9fd8f659342e931..3ac7ebae7c3c876c12ae01845d06af1b0db8a0d4 100644 (file)
@@ -1,32 +1,62 @@
 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")