]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/plugin.go
Give Lua access to most of the Go stdlib
[micro.git] / cmd / micro / plugin.go
index 4b42f5bdd7a620a4c6563d724eecd100bccb4f3c..04e7b78b27b448221b6c382551d3934753491a3a 100644 (file)
@@ -6,8 +6,9 @@ import (
        "os"
        "strings"
 
-       "github.com/layeh/gopher-luar"
        "github.com/yuin/gopher-lua"
+       "github.com/zyedidia/tcell"
+       "layeh.com/gopher-luar"
 )
 
 var loadedPlugins map[string]string
@@ -60,6 +61,16 @@ func LuaFunctionBinding(function string) func(*View, bool) bool {
        }
 }
 
+func LuaFunctionMouseBinding(function string) func(*View, bool, *tcell.EventMouse) bool {
+       return func(v *View, _ bool, e *tcell.EventMouse) bool {
+               _, err := Call(function, e)
+               if err != nil {
+                       TermMessage(err)
+               }
+               return false
+       }
+}
+
 func unpack(old []string) []interface{} {
        new := make([]interface{}, len(old))
        for i, v := range old {
@@ -119,11 +130,9 @@ func luaPluginName(name string) string {
 
 // LoadPlugins loads the pre-installed plugins and the plugins located in ~/.config/micro/plugins
 func LoadPlugins() {
-
        loadedPlugins = make(map[string]string)
 
        for _, plugin := range ListRuntimeFiles(RTPlugin) {
-
                pluginName := plugin.Name()
                if _, ok := loadedPlugins[pluginName]; ok {
                        continue
@@ -136,9 +145,8 @@ func LoadPlugins() {
                }
 
                pluginLuaName := luaPluginName(pluginName)
-               pluginDef := "\nlocal P = {}\n" + pluginLuaName + " = P\nsetmetatable(" + pluginLuaName + ", {__index = _G})\nsetfenv(1, P)\n"
 
-               if err := L.DoString(pluginDef + string(data)); err != nil {
+               if err := LoadFile(pluginName, pluginName, string(data)); err != nil {
                        TermMessage(err)
                        continue
                }
@@ -148,9 +156,8 @@ func LoadPlugins() {
        }
 
        if _, err := os.Stat(configDir + "/init.lua"); err == nil {
-               pluginDef := "\nlocal P = {}\n" + "init" + " = P\nsetmetatable(" + "init" + ", {__index = _G})\nsetfenv(1, P)\n"
                data, _ := ioutil.ReadFile(configDir + "/init.lua")
-               if err := L.DoString(pluginDef + string(data)); err != nil {
+               if err := LoadFile("init", configDir+"init.lua", string(data)); err != nil {
                        TermMessage(err)
                }
                loadedPlugins["init"] = "init"