aboutsummaryrefslogtreecommitdiffstats
path: root/auto_source.js
diff options
context:
space:
mode:
authoranekos2008-11-14 09:11:17 +0000
committeranekos2008-11-14 09:11:17 +0000
commitc8f39239b209dba0db279c0e2a11eeaed09de5b4 (patch)
tree6929734027e32190889d334630dbe5e2cb52be49 /auto_source.js
parent97469f398bad38e28dff684bb871d024bc7e6b44 (diff)
downloadvimperator-plugins-c8f39239b209dba0db279c0e2a11eeaed09de5b4.tar.bz2
Added
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/branches/1.2@23678 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'auto_source.js')
-rw-r--r--auto_source.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/auto_source.js b/auto_source.js
new file mode 100644
index 0000000..90c7e26
--- /dev/null
+++ b/auto_source.js
@@ -0,0 +1,82 @@
+// ==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 1.2
+// @minVersion 1.2
+// ==/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) {
+ (bang ? killWatcher : startWatching)(io.expandPath(arg.string));
+ },
+ {
+ bang: true,
+ argCount: '1',
+ completer: function (arg, bang) {
+ return bang ? [0, [[filepath, ''] for (filepath in files)]]
+ : completion.file.apply(this, arguments);
+ }
+ },
+ true
+ );
+
+})();