aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_loader.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_loader.js')
-rw-r--r--plugin_loader.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/plugin_loader.js b/plugin_loader.js
new file mode 100644
index 0000000..0350332
--- /dev/null
+++ b/plugin_loader.js
@@ -0,0 +1,49 @@
+// ==VimperatorPlugin==
+// @name Plugin Loader
+// @description to load plugins from specified directory at starting up Vimperator.
+// @description-ja 指定(ディレクトリ|プラグイン)を起動時にロードする
+// @license Creative Commons 2.1 (Attribution + Share Alike)
+// @version 2.3
+// @minVersion 1.2
+// @maxVersion 2.0Pre
+// @author anekos
+// ==/VimperatorPlugin==
+//
+// Usage:
+// let g:plugin_loader_roots = "<PLUGIN_DIRECTORIES>"
+// let g:plugin_loader_plugins = "<PLUGIN_NAMES>"
+//
+// Example:
+// let g:plugin_loader_roots = "/home/anekos/coderepos/vimp-plugins/ /home/anekos/my-vimp-plugins/"
+// let g:plugin_loader_plugins = "lo,migemized_find,nico_related_videos"
+//
+// Link:
+// http://d.hatena.ne.jp/nokturnalmortum/20081008#1223397705
+
+{
+ function toArray (obj) {
+ return obj instanceof Array ? obj
+ : obj.toString().split(/[,| \t\r\n]+/);
+ }
+
+ let roots = toArray(liberator.globalVariables.plugin_loader_roots);
+ let plugins = toArray(liberator.globalVariables.plugin_loader_plugins);
+ let filter = new RegExp('[\\\\/](?:' +
+ plugins.map(function (plugin) plugin.replace(/(?=[\\^$.+*?|(){}\[\]])/g, '\\'))
+ .join('|') +
+ ')\\.(?:js|vimp)$');
+
+ liberator.log('plugin_loader: loading');
+
+ roots.forEach(function (root) {
+ let files = io.readDirectory(io.getFile(root), true);
+ files.forEach(function (file) {
+ if (filter.test(file.path)) {
+ liberator.log("Sourcing: " + file.path);
+ io.source(file.path, false);
+ }
+ });
+ });
+
+ liberator.log('plugin_loader: loaded');
+}