aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_loader.js
blob: 253db22db8b14babb245823dc99a19b3871e5936 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// ==VimperatorPlugin==
// @name           Plugin Loader
// @description-ja 指定(ディレクトリ|プラグイン)を起動時にロードする
// @license        Creative Commons 2.1 (Attribution + Share Alike)
// @version        2.2
// @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(/[,|\s]/);
}

let roots = toArray(globalVariables.plugin_loader_roots);
let plugins = toArray(globalVariables.plugin_loader_plugins);
let filter = new RegExp('[\\\\/](' + plugins.join('|') + ')\\.(js|vimp)$');

log('plugin_loader: loading');

for each (let root in roots) {
  let files = io.readDirectory(io.getFile(root), true);
  for each (let file in files) {
    if (!filter.test(file.path))
      continue;
    liberator.io.source(file.path, false);
  }
}

log('plugin_loader: loaded');