Hatena::Groupkeysnail

きすねた(ん)

2010-03-16

たべぞう・はまぞう検索をコマンドシステムで

| 01:46 | たべぞう・はまぞう検索をコマンドシステムで - きすねた(ん) を含むブックマーク はてなブックマーク - たべぞう・はまぞう検索をコマンドシステムで - きすねた(ん)

こういう小物プラグインを呼び出すターミナルみたいなプラグインが欲しいなと思い始めた。

http://keysnail.g.hatena.ne.jp/basyura/20100316/1268748044

ちょっと違うかもしれないけれど, shell.input というコマンドシステムがある. VimVimperator の : を想像されたし.

key.setViewKey(':', function () {
    shell.input();
}, 'Command System');

このシステムでは, 自分でコマンドを追加することが可能. 今回の{たべ, はま}ぞう検索なら, 次のようなところか.

let user = plugins.options["zou_search.user"];

function defineFooZouCommand(names, description, dir) {
    shell.add(names, description,
              function (args, extra) {
                  let words = encodeURIComponent(extra.left);
                  let url = "http://d.hatena.ne.jp/" + user + "/" + dir + "/search?mode=&ie=utf-8&word=" + words;
                  gBrowser.loadOneTab(url, null, null, null, extra.bang);
              },
              {
                  bang      : true,
                  literal   : 0,
                  completer : function (args, extra) {
                      let engines = [util.suggest.ss.getEngineByName("Google")];
                      return completer.fetch.suggest(engines, true)(extra.left || "", extra.whole || "");
                  }
              });
}

defineFooZouCommand(["hama[zou]"], M({ja: "はまぞう検索", en: "hamazou search"}), "hamazou");
defineFooZouCommand(["tabe[zou]"], M({ja: "たべぞう検索", en: "tabezou search"}), "tabezou");

: としてコマンド入力画面を表示させてから, {hama, tabe} と打ち込んでスペースを一つ開け, 検索ワードを入力する.

f:id:mooz:20100317014454p:image

このとき何らかの文字を入力してから TAB を押せば Google サジェストを使って引っ張ってきた候補が表示される.

f:id:mooz:20100317014455p:image

入力が終わったら Enter. また, hamazou! や hama! のように ! を付けると, タブが背面に開かれる. Vim な方々にはお馴染みの bang システム.

いちいち : hamazou TAB などとするのが面倒だ, と言う場合はキーを一つ消費して次のようなことも可能. 初期値を与えて shell.input を呼んでいる.

key.setViewKey('h', function (aEvent, aArg) {
    shell.input("hamazou ");
}, 'hamazou search', true);

また, 組み込みコマンドだけれど僕はこんなことをしている. さっとググれて便利.

key.setViewKey('s', function (ev, arg) {
    shell.input("tabopen google ");
}, 'Google word');