X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=cmd%2Fmicro%2Frtfiles.go;h=91bafa08fc75c2eb2fa9314ef7ccf1e8964ee02c;hb=3ecdd96931ac75039105b5a4ac2fdd3b5526dbf6;hp=5466b548eb394f323d948fc8096955c7e758dc4c;hpb=9eeb14956cd12959cddcc00ce91a03defa8a308e;p=micro.git diff --git a/cmd/micro/rtfiles.go b/cmd/micro/rtfiles.go index 5466b548..91bafa08 100644 --- a/cmd/micro/rtfiles.go +++ b/cmd/micro/rtfiles.go @@ -2,14 +2,16 @@ package main import ( "io/ioutil" + "os" "path" "path/filepath" ) const ( - FILE_ColorScheme = "colorscheme" - FILE_Syntax = "syntax" - FILE_Help = "help" + RTColorscheme = "colorscheme" + RTSyntax = "syntax" + RTHelp = "help" + RTPlugin = "plugin" ) // RuntimeFile allows the program to read runtime data like colorschemes or syntax files @@ -77,7 +79,7 @@ func AddRuntimeFilesFromDirectory(fileType, directory, pattern string) { } } -// AddRuntimeFilesFromDirectory registers each file from the given asset-directory for +// AddRuntimeFilesFromAssets registers each file from the given asset-directory for // the filetype which matches the file-pattern func AddRuntimeFilesFromAssets(fileType, directory, pattern string) { files, err := AssetDir(directory) @@ -102,28 +104,47 @@ func FindRuntimeFile(fileType, name string) RuntimeFile { return nil } -// Lists all known runtime files for the given filetype +// ListRuntimeFiles lists all known runtime files for the given filetype func ListRuntimeFiles(fileType string) []RuntimeFile { if files, ok := allFiles[fileType]; ok { return files - } else { - return []RuntimeFile{} } + return []RuntimeFile{} } -// Initializes all assets file and the config directory +// InitRuntimeFiles initializes all assets file and the config directory func InitRuntimeFiles() { add := func(fileType, dir, pattern string) { AddRuntimeFilesFromDirectory(fileType, filepath.Join(configDir, dir), pattern) AddRuntimeFilesFromAssets(fileType, path.Join("runtime", dir), pattern) } - add(FILE_ColorScheme, "colorschemes", "*.micro") - add(FILE_Syntax, "syntax", "*.micro") - add(FILE_Help, "help", "*.md") + add(RTColorscheme, "colorschemes", "*.micro") + add(RTSyntax, "syntax", "*.micro") + add(RTHelp, "help", "*.md") + + // Search configDir for plugin-scripts + files, _ := ioutil.ReadDir(filepath.Join(configDir, "plugins")) + for _, f := range files { + if f.IsDir() { + scriptPath := filepath.Join(configDir, "plugins", f.Name(), f.Name()+".lua") + if _, err := os.Stat(scriptPath); err == nil { + AddRuntimeFile(RTPlugin, realFile(scriptPath)) + } + } + } + + if files, err := AssetDir("runtime/plugins"); err == nil { + for _, f := range files { + scriptPath := path.Join("runtime/plugins", f, f+".lua") + if _, err := AssetInfo(scriptPath); err == nil { + AddRuntimeFile(RTPlugin, assetFile(scriptPath)) + } + } + } } -// Allows plugin scripts to read the content of a runtime file +// PluginReadRuntimeFile allows plugin scripts to read the content of a runtime file func PluginReadRuntimeFile(fileType, name string) string { if file := FindRuntimeFile(fileType, name); file != nil { if data, err := file.Data(); err == nil { @@ -133,7 +154,7 @@ func PluginReadRuntimeFile(fileType, name string) string { return "" } -// Allows plugins to lists all runtime files of the given type +// PluginListRuntimeFiles allows plugins to lists all runtime files of the given type func PluginListRuntimeFiles(fileType string) []string { files := ListRuntimeFiles(fileType) result := make([]string, len(files)) @@ -142,3 +163,25 @@ func PluginListRuntimeFiles(fileType string) []string { } return result } + +// PluginAddRuntimeFile adds a file to the runtime files for a plugin +func PluginAddRuntimeFile(plugin, filetype, filePath string) { + fullpath := filepath.Join(configDir, "plugins", plugin, filePath) + if _, err := os.Stat(fullpath); err == nil { + AddRuntimeFile(filetype, realFile(fullpath)) + } else { + fullpath = path.Join("runtime", "plugins", plugin, filePath) + AddRuntimeFile(filetype, assetFile(fullpath)) + } +} + +// PluginAddRuntimeFilesFromDirectory adds files from a directory to the runtime files for a plugin +func PluginAddRuntimeFilesFromDirectory(plugin, filetype, directory, pattern string) { + fullpath := filepath.Join(configDir, "plugins", plugin, directory) + if _, err := os.Stat(fullpath); err == nil { + AddRuntimeFilesFromDirectory(filetype, fullpath, pattern) + } else { + fullpath = path.Join("runtime", "plugins", plugin, directory) + AddRuntimeFilesFromAssets(filetype, fullpath, pattern) + } +}