Vimperatorのプラグインを作る練習。とりあえず二つ作ってみた。2コマー!(富永一朗のマネで) それぞれ ~/.vimperator/plugin/ 以下に適当なファイルを作ってコピペしてFirefoxを再起動すれば動く、はず。

まずはニコニコ動画で見ている動画をローカルに保存する、というものを作ってみた。いい歳してまたニコニコかという声が聴こえてくるような気がしますが最近はほとんど見てないし見るとしてもMADアイマスプロデューサーとかそういう健全な感じのものだけなので安心して!(←きれいに墓穴を掘る人の図)

(function(){
  liberator.commands.addUserCommand(['gn'], 'get nicovideo',
    function(){
      var flvp = window.content.document.getElementById('flvplayer');
      if(flvp){
        var info = flvp.wrappedJSObject.GetVariable('o');
        var url = decodeURIComponent(info.match(/url\=(.*?)\&/)[1]);
        liberator.open(url, CURRENT_TAB);
      }
    }, {}
  );
})();

動画を見ていてローカルに保存したくなったらおもむろに :gn するとファイルをどうこうするダイアログが開くので適当に名前をつけたりすればいいんじゃないでしょうか。やるなら動画の読み込みが完全に終わってからの方がいい。

次にcompleterの練習として色々な国の日時を表示する、というものを作ってみた。うわ、要らねえ。

(function(){
  liberator.commands.addUserCommand(['date'], "echo date",
    function(arg){
      function date(diff){
        d = new Date()
        d.setTime(d.getTime() + 1000*60*60*diff);
        s = d.toString();
        return s.substr(0, s.indexOf('GMT')-1);
      }

      switch(arg){
        case 'la':
          date = 'LosAngeles: ' + date(-16);
          break;

        case 'lo':
          date = 'London: ' + date(-8);
          break;

        case 'nd':
          date = 'NewDelhi: ' + date(-3.5);
          break;

        case 'ny':
          date = 'NewYork: ' + date(-13);
          break;

        case 'pa':
          date = 'Paris: ' + date(-7);
          break;

        case 'pr':
          date = 'Prague: ' + date(-7);
          break;

        default:
          date = 'Tokyo: ' + date(0);
          break;
        }
      liberator.echo(date);
    },
    {
      completer: function(filter){
        var all_suggestions = [
          ['la', 'LosAngeles(U.S.A.)'],
          ['lo', 'London(U.K.)'],
          ['nd', 'NewDelhi(India)'],
          ['ny', 'NewYork(U.S.A.)'],
          ['pa', 'Paris(France)'],
          ['pr', 'Prague(Czech)'],
          ['tk', 'Tokyo(Japan)']
        ];

        var suggestions = all_suggestions.filter(function(s){
          return s[0].indexOf(filter) == 0;
        });

        return [0, suggestions];
      }
    }
  );
})();

おもむろに :date とかすると日本の現在の日時が表示される。:date ny とかするとニューヨークの現在の日時が表示される。うわ、要らねえ(二回目)。