-// LoadPlugins loads the pre-installed plugins and the plugins located in ~/.config/micro/plugins
-func LoadPlugins() {
- files, _ := ioutil.ReadDir(configDir + "/plugins")
- for _, plugin := range files {
- if plugin.IsDir() {
- pluginName := plugin.Name()
- files, _ := ioutil.ReadDir(configDir + "/plugins/" + pluginName)
- for _, f := range files {
- if f.Name() == pluginName+".lua" {
- if err := L.DoFile(configDir + "/plugins/" + pluginName + "/" + f.Name()); err != nil {
- TermMessage(err)
- continue
- }
- loadedPlugins = append(loadedPlugins, pluginName)
+// LuaFunctionComplete returns a function which can be used for autocomplete in plugins
+func LuaFunctionComplete(function string) func(string) []string {
+ return func(input string) (result []string) {
+
+ res, err := Call(function, input)
+ if err != nil {
+ TermMessage(err)
+ }
+ if tbl, ok := res.(*lua.LTable); !ok {
+ TermMessage(function, "should return a table of strings")
+ } else {
+ for i := 1; i <= tbl.Len(); i++ {
+ val := tbl.RawGetInt(i)
+ if v, ok := val.(lua.LString); !ok {
+ TermMessage(function, "should return a table of strings")
+ } else {
+ result = append(result, string(v))