後で読むを支援するvimperatorのプラグインを作ってみた

私は,読み終わったサイトはdeliciousに,後で読もうかなーってサイトはfirefoxのブックマークに登録して,ブックマークを使い分けていたんだけど。
このfirefoxのブックマークの操作は,残念なことにvimperatorを使っていてもマウスを使わざるをえなく,腕に負担がかかってしまう。
この腕の疲労は,ブラウザに体を蝕まれているということを示唆していて,真に深厚な状態である。
そこで,この状態を打破するために,マウスを使わなくても操作が可能なブックマーク領域を作ってみた。
アイディアはネットスケープのLinkPadを継承している。というかパクリ。


私は,Cしか高級言語を触ったことが無いので,javascriptみたいなのは変体すぎて触ってみる気に慣れなかったんだけど,vimperatorがあまりにも魅力的過ぎるからプラグインを書いてしまった。javascriptでプログラムのようなものを書いたのは初めてだから,もしかしたらjavascriptらしくないプログラムかもしれないので至らないことがあったら,コメントしてちょ。

linkpad.js

/*
 * @name            linkpad.js
 * @description     like LinkPad of Netscape.
 * @description-ja  ネットスケープのLinkPadのようなもの。
 * @author          wocota <wocota@gmail.com>
 * @version         0.01
 *
 * LICENSE
 *   Public Domain http://creativecommons.org/licenses/publicdomain/
 *
 * USAGE
 *   :linkpad [site]
 *     LinkPadに登録されているサイトを表示。選択して開く。開くと勝手にLinkPadから消える。
 *   :addlinkpad
 *     LinkPadに登録。
 * 
 */

liberator.plugins.exLinkPad = (function(){
  var linkpad = storage.newMap("linkpad", true);
  var links = [];
  // view links list and open link
  commands.addUserCommand(['linkpad'],' linkpad ',
                          function (args){
                            let arg     = args.literalArg;
                            let num = arg.match(/^\d+/);
                            if(num > 0){
                              liberator.plugins.exLinkPad.open(links[--num][1], liberator.NEW_TAB);
                            } else {
                              liberator.echoerr("Error!:not set");
                            }
                          },{
                            completer: function(context) liberator.plugins.exLinkPad.list(context),
                            argCount: "?",
                            bang: true,
                            count: true,
                            literal: 0
                          }
  );
  // add link of current tab
  commands.addUserCommand(['addlinkpad'],' addlinkpad ',
                          function (){
                            liberator.plugins.exLinkPad.add(buffer.URL, buffer.title);
                          }
  );
  
  return {
    add: function add(url, name)
    {
      linkpad.set(url, name);
      liberator.echomsg("Added Link Pad '" + name + "': " + url, 1);
    },
    //del: function del(url)
    //{
    //	linkpad.remove(url);
    //	liberator.echomsg("Delited Link Pad : " + url, 1);
    //},
    open: function open(url, where)
    {
      if (url) {
        liberator.open(url, where);
        linkpad.remove(url);
      } else {
        liberator.echoerr("Error!:not set");
      }
    },
    list: function list(context){
      //filter = context.filter.toLowerCase();
      context.title = ["Link Pad", "URL"];
      let i = 1;
      links = [];
      for(let [url,] in linkpad){
        let title = i++ + ':' + linkpad.get(url);
        //if(title.indexOf(filter) == 0)
        links.push([title, url]);
      }
      return [0, links];
    }
  };
})();

なにこれ?

vimperatorのQuickMarkと同様,firefoxに新たにブックマーク領域を追加するものである。
QuickMarkとこのLinkPadの違いは,前者はオペラのクイックダイアルのような使い方に向いていて,これはネットスケープのLinkPadのような使い方に向いている。

使い方

これを適当な名前(linkpad.jsとか)で保存し,プラグインフォルダに入れると,下記の二つのコマンドが追加される。

:linkpad

:linkpad と打てばLinkPadに登録されているサイトを補完領域に表示してくれる:

などで選択しすれば,選択したサイトが開かれる。なお開いた後そのサイトはLinkPadから削除される:

この引数は数字だけが意味があるので,単に :linkpad 2としても上記と同じ動作をする。

:addlinkpad

LinkPadに現在開いているサイトを登録してくれる

設定

rcには例えば次のような設定をしておくと:

noremap m :linkpad<Space>
noremap M :addlinkpad<cr>

mでLinkPad表示,Mで追加となる。