blob: 19bbaceaa533eb581cd7357c50402c6ba2d567e5 (
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
// ==VimperatorPlugin==
// @name Auto Source
// @description Sourcing automatically when the specified file is modified.
// @description-ja 指定のファイルが変更されたら自動で :so する。
// @license Creative Commons 2.1 (Attribution + Share Alike)
// @version 1.0
// @author anekos (anekos@snca.net)
// @maxVersion 2.0pre
// @minVersion 2.0pre
// ==/VimperatorPlugin==
//
// Usage:
// Start watching
// :aso taro.js
// :autoso[urce] taro.js
// Stop watching
// :aso! taro.js
// :autoso[urce]! taro.js
//
// Usage-ja:
// 監視を開始
// :aso taro.js
// :autoso[urce] taro.js
// 監視を中止
// :aso! taro.js
// :autoso[urce]! taro.js
//
// Links:
// http://d.hatena.ne.jp/nokturnalmortum/20081114#1226652163
// http://p-pit.net/rozen/
(function () {
let files = {};
let firstTime = window.eval(liberator.globalVariables.auto_source_first_time || 'false');
let interval = window.eval(liberator.globalVariables.auto_source_interval || '500');
function getFileModifiedTime (filepath) {
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath(filepath);
return file.lastModifiedTime;
}
function startWatching (filepath) {
if (files[filepath] !== undefined)
throw "The file has already been watched: " + filepath;
let last = firstTime ? null : getFileModifiedTime(filepath);
files[filepath] = setInterval(function () {
let current = getFileModifiedTime(filepath);
if (last != current) {
liberator.log('sourcing: ' + filepath);
last = current;
io.source(filepath);
}
}, interval);
}
function killWatcher (filepath) {
if (files[filepath] === undefined)
throw "The file is not watched: " + filepath;
clearInterval(files[filepath]);
delete files[filepath];
}
commands.addUserCommand(
['autoso[urce]', 'aso'],
'Sourcing automatically when the specified file is modified.',
function (arg, bang) {
liberator.log(arg);
liberator.log(io.expandPath(arg.string));
(bang ? killWatcher : startWatching)(io.expandPath(arg.string));
},
{
bang: true,
completer: function (arg, bang) {
return bang ? [0, [[filepath, ''] for (filepath in files)]]
: completion.file.apply(this, arguments);
}
},
true
);
})();
|