"os"
"strings"
- "github.com/layeh/gopher-luar"
"github.com/yuin/gopher-lua"
+ "github.com/zyedidia/tcell"
+ "layeh.com/gopher-luar"
)
-var loadedPlugins []string
+var loadedPlugins map[string]string
// Call calls the lua function 'function'
// If it does not exist nothing happens, if there is an error,
}
}
+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 {
}
}
+// luaPluginName convert a human-friendly plugin name into a valid lua variable name.
+func luaPluginName(name string) string {
+ return strings.Replace(name, "-", "_", -1)
+}
+
// 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) {
- alreadyExists := false
pluginName := plugin.Name()
- for _, pl := range loadedPlugins {
- if pl == pluginName {
- alreadyExists = true
- break
- }
+ if _, ok := loadedPlugins[pluginName]; ok {
+ continue
}
- if !alreadyExists {
- data, err := plugin.Data()
- if err != nil {
- TermMessage("Error loading plugin: " + pluginName)
- continue
- }
- pluginDef := "\nlocal P = {}\n" + pluginName + " = P\nsetmetatable(" + pluginName + ", {__index = _G})\nsetfenv(1, P)\n"
+ data, err := plugin.Data()
+ if err != nil {
+ TermMessage("Error loading plugin: " + pluginName)
+ continue
+ }
- if err := L.DoString(pluginDef + string(data)); err != nil {
- TermMessage(err)
- continue
- }
- loadedPlugins = append(loadedPlugins, pluginName)
+ pluginLuaName := luaPluginName(pluginName)
+
+ if err := LoadFile(pluginName, pluginName, string(data)); err != nil {
+ TermMessage(err)
+ continue
}
+
+ loadedPlugins[pluginName] = pluginLuaName
+
}
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 = append(loadedPlugins, "init")
+ loadedPlugins["init"] = "init"
}
}