]> git.lizzy.rs Git - micro.git/commitdiff
refactor(plugin): Enable human-friendly plugin name
authorThomas LE ROUX <github@november-eleven.fr>
Mon, 12 Dec 2016 15:37:48 +0000 (16:37 +0100)
committerThomas LE ROUX <github@november-eleven.fr>
Mon, 12 Dec 2016 15:37:48 +0000 (16:37 +0100)
cmd/micro/actions.go
cmd/micro/command.go
cmd/micro/eventhandler.go
cmd/micro/micro.go
cmd/micro/plugin.go
cmd/micro/pluginmanager.go
cmd/micro/view.go

index 8b31b0ab764d29075732b0fd212e045208c1e684..bef2f1e42bd38a1b0ce98a071c2d4587aeae369e 100644 (file)
@@ -13,7 +13,7 @@ import (
 // PreActionCall executes the lua pre callback if possible
 func PreActionCall(funcName string, view *View) bool {
        executeAction := true
-       for _, pl := range loadedPlugins {
+       for pl := range loadedPlugins {
                ret, err := Call(pl+".pre"+funcName, view)
                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                        TermMessage(err)
@@ -29,7 +29,7 @@ func PreActionCall(funcName string, view *View) bool {
 // PostActionCall executes the lua plugin callback if possible
 func PostActionCall(funcName string, view *View) bool {
        relocate := true
-       for _, pl := range loadedPlugins {
+       for pl := range loadedPlugins {
                ret, err := Call(pl+".on"+funcName, view)
                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                        TermMessage(err)
@@ -1651,7 +1651,7 @@ func (v *View) PlayMacro(usePlugin bool) bool {
                        v.Buf.Insert(v.Cursor.Loc, string(t))
                        v.Cursor.Right()
 
-                       for _, pl := range loadedPlugins {
+                       for pl := range loadedPlugins {
                                _, err := Call(pl+".onRune", string(t), v)
                                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                                        TermMessage(err)
index 203212be3629b2ce1199d6dab5e911a70f2afb47..5eba260ac6b81f0e2461988c18f6eef3611d0b86 100644 (file)
@@ -133,12 +133,10 @@ func PluginCmd(args []string) {
                        removed := ""
                        for _, plugin := range args[1:] {
                                // check if the plugin exists.
-                               for _, lp := range loadedPlugins {
-                                       if lp == plugin {
-                                               UninstallPlugin(plugin)
-                                               removed += plugin + " "
-                                               continue
-                                       }
+                               if _, ok := loadedPlugins[plugin]; ok {
+                                       UninstallPlugin(plugin)
+                                       removed += plugin + " "
+                                       continue
                                }
                        }
                        if !IsSpaces(removed) {
index efeca821a1c531eff1a5e2c62c88412bc8be376d..480df5b6fd4cf8c76b84eb0c1f0ece67f6166219 100644 (file)
@@ -117,7 +117,7 @@ func (eh *EventHandler) Execute(t *TextEvent) {
        }
        eh.UndoStack.Push(t)
 
-       for _, pl := range loadedPlugins {
+       for pl := range loadedPlugins {
                ret, err := Call(pl+".onBeforeTextEvent", t)
                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                        TermMessage(err)
index 33cf2a209cc2dae5b6130a88a8dcfe6f6a66765c..f0d13394cac2448abf18b6f97c7913db76fea874 100644 (file)
@@ -385,7 +385,7 @@ func main() {
                for _, v := range t.views {
                        v.Buf.FindFileType()
                        v.Buf.UpdateRules()
-                       for _, pl := range loadedPlugins {
+                       for pl := range loadedPlugins {
                                _, err := Call(pl+".onViewOpen", v)
                                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                                        TermMessage(err)
index d77baea9ba5fdf4e3c6eaecc757bfe553323aa4b..4b42f5bdd7a620a4c6563d724eecd100bccb4f3c 100644 (file)
@@ -10,7 +10,7 @@ import (
        "github.com/yuin/gopher-lua"
 )
 
-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,
@@ -112,32 +112,39 @@ func LuaFunctionJob(function string) func(string, ...string) {
        }
 }
 
+// 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)
+               pluginDef := "\nlocal P = {}\n" + pluginLuaName + " = P\nsetmetatable(" + pluginLuaName + ", {__index = _G})\nsetfenv(1, P)\n"
+
+               if err := L.DoString(pluginDef + string(data)); err != nil {
+                       TermMessage(err)
+                       continue
                }
+
+               loadedPlugins[pluginName] = pluginLuaName
+
        }
 
        if _, err := os.Stat(configDir + "/init.lua"); err == nil {
@@ -146,6 +153,6 @@ func LoadPlugins() {
                if err := L.DoString(pluginDef + string(data)); err != nil {
                        TermMessage(err)
                }
-               loadedPlugins = append(loadedPlugins, "init")
+               loadedPlugins["init"] = "init"
        }
 }
index 8909a278ff8d140b63eb0342ff421fad1ef1e74d..0703a62f5d1d4339aeceb35728cf5281a50a1eb3 100644 (file)
@@ -358,8 +358,8 @@ func GetInstalledVersions(withCore bool) PluginVersions {
                result = append(result, newStaticPluginVersion(CorePluginName, Version))
        }
 
-       for _, name := range loadedPlugins {
-               version := GetInstalledPluginVersion(name)
+       for name, lpname := range loadedPlugins {
+               version := GetInstalledPluginVersion(lpname)
                if pv := newStaticPluginVersion(name, version); pv != nil {
                        result = append(result, pv)
                }
@@ -561,7 +561,9 @@ func (pv PluginVersions) install() {
 func UninstallPlugin(name string) {
        if err := os.RemoveAll(filepath.Join(configDir, "plugins", name)); err != nil {
                messenger.Error(err)
+               return
        }
+       delete(loadedPlugins, name)
 }
 
 // Install installs the plugin
@@ -582,7 +584,9 @@ func (pl PluginPackage) Install() {
 func UpdatePlugins(plugins []string) {
        // if no plugins are specified, update all installed plugins.
        if len(plugins) == 0 {
-               plugins = loadedPlugins
+               for name := range loadedPlugins {
+                       plugins = append(plugins, name)
+               }
        }
 
        messenger.AddLog("Checking for plugin updates")
index 80ca49424f7da16bbce757f8b3a617450f4e0836..6a279c8fba1ba9320c3296c2f0edd74ce4d6a225 100644 (file)
@@ -120,7 +120,7 @@ func NewViewWidthHeight(buf *Buffer, w, h int) *View {
                v.Height--
        }
 
-       for _, pl := range loadedPlugins {
+       for pl := range loadedPlugins {
                _, err := Call(pl+".onViewOpen", v)
                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                        TermMessage(err)
@@ -487,7 +487,7 @@ func (v *View) HandleEvent(event tcell.Event) {
                        v.Buf.Insert(v.Cursor.Loc, string(e.Rune()))
                        v.Cursor.Right()
 
-                       for _, pl := range loadedPlugins {
+                       for pl := range loadedPlugins {
                                _, err := Call(pl+".onRune", string(e.Rune()), v)
                                if err != nil && !strings.HasPrefix(err.Error(), "function does not exist") {
                                        TermMessage(err)