aboutsummaryrefslogtreecommitdiffstats
path: root/auto_source.js
diff options
context:
space:
mode:
authoranekos2008-11-14 08:59:14 +0000
committeranekos2008-11-14 08:59:14 +0000
commit0d62c1324517e4febea700ed19c45b5a3c37c9b0 (patch)
treeb40188ff4216b7be966627626045dffa202ce0df /auto_source.js
parentd4fd614fbce5cf6d8f57ca24920700a7a6b7a412 (diff)
downloadvimperator-plugins-0d62c1324517e4febea700ed19c45b5a3c37c9b0.tar.bz2
Initial release: ファイル変更を監視して、自動で :so するプラグイン
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@23676 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'auto_source.js')
-rw-r--r--auto_source.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/auto_source.js b/auto_source.js
new file mode 100644
index 0000000..19bbace
--- /dev/null
+++ b/auto_source.js
@@ -0,0 +1,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
+ );
+
+})();