aboutsummaryrefslogtreecommitdiffstats
path: root/memo.js
blob: 0c6fb81d45b89d54e0f31376eccc8cf3d2e7028e (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<
// Vimperator plugin: Ubiquity
// Maintainer: mattn <mattn.jp@gmail.com> - http://mattn.kaoriya.net
// Require: Ubiquity - https://wiki.mozilla.org/Labs/Ubiquity
// Usage:
//   :ubiquity command...  - show Ubiquity's command dialog.
//   :ubiquity! command... - run Ubiquity's command.

(function() {
	if (typeof gUbiquity === 'undefined') return;
	liberator.commands.addUserCommand(["ubiquity"], "Ubiquity",
	function(arg){
		var anchor = document.getElementById("content");
		if (window.location == "chrome://browser/content/browser.xul"// ==VimperatorPlugin==
// @name           memo
// @description    to write a memo
// @description-ja メモを書く
// @license        Creative Commons 2.1 (Attribution + Share Alike)
// @version        1.0
// @author         anekos (anekos@snca.net)
// @maxVersion     2.0pre
// @minVersion     2.0pre
// ==/VimperatorPlugin==
//
// Usage:
//    :memo
//      show the memo that was written.
//    :memo fooooobar!
//      write "fooooobar!" to the specified memo file.
//
// Usage-ja:
//    :memo
//      書かれたメモを表示する
//    :memo fooooobar!
//      "fooooobar!" と、メモに書く
//
// Links:
//
// References:
//    http://developer.mozilla.org/index.php?title=Ja/Code_snippets/File_I%2F%2FO

(function () {
  let localfilepath = liberator.globalVariables.memo_filepath || io.expandPath('~/.vimpmemo');
  let charset = 'UTF-8';

  //ネタ的
  let lz = function(s,n)(s+'').replace(new RegExp('^.{0,'+(n-1)+'}$'),function(s)lz('0'+s,n));

  function dateTime () {
    with (new Date())
      return lz(getFullYear(), 4) + '/' +
             lz(getMonth() + 1, 2) + '/' +
             lz(getDate(), 2) + ' ' +
             lz(getHours(), 2) + ':' +
             lz(getMinutes(), 2);
  }

  function filepath () {
    let result = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
    result.initWithPath(localfilepath);
    return result;
  }

  function puts (line) {
    line = dateTime() + "\t" + line + "\n";
    let out = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
    let conv = Cc['@mozilla.org/intl/converter-output-stream;1'].
                            createInstance(Ci.nsIConverterOutputStream);
    out.init(filepath(), 0x02 | 0x10 | 0x08, 0664, 0);
    conv.init(out, charset, line.length,
              Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
    conv.writeString(line);
    conv.close();
    out.close();
  }

  function gets () {
    let file = Cc['@mozilla.org/network/file-input-stream;1'].createInstance(Ci.nsIFileInputStream);
    file.init(filepath(), 1, 0, false);
    let conv = Cc['@mozilla.org/intl/converter-input-stream;1'].createInstance(Ci.nsIConverterInputStream);
    conv.init(file, charset, file.available(), conv.DEFAULT_REPLACEMENT_CHARACTER);
    let result = {};
    conv.readString(file.available(), result);
    conv.close();
    file.close();
    return result.value;
  }

  commands.addUserCommand(
    ['memo'],
    'Write memo',
    function (arg) {
      if (arg.string) {
        puts(arg.string);
      } else {
        liberator.echo(gets());
      }
    }
  );

})();