Vimperator Navigation!

Vimperator Advent Calendar 2012 25日目参加記事です.

できる男は知らない場所でもナビゲートできる

Vimperator で 前のページへ戻る次のページへ行く のは [[]] だ.グーグルの検索結果ページなど色んなサイトで使えるけど,もちろん全てのサイトに対応しているわけではない.

が,自分のよく行くサイトが対応していなかったら,やっぱり対応したくなっちゃうのが人情というもの.(というか同じキーバインドでページ繰りできないとムキィー!ってなるのが主な動機だけど

というわけでデフォルトの状態で [[]] で前後ページに移動できないサイトを,移動できるようにしてみたいと思う.

コード

以下のコードを .vimperatorrc にコピペすると,とりあえず

  1. 小説・コミック読み放題 - E★エブリスタ の前後ページヘの移動を [[]]
  2. Togetter の「残りを読む」を ]]
  3. 国立国会図書館デジタル化資料 の前後ページヘの移動を [[]]

できるようになる.

" Vimperator Navigation!
js << EOM
  [[
    '^http://estar\.jp/\.pc/_[a-z]+_viewer', // Site (RegExp)
    '#bq_prev_box',                          // Selector of Prev
    '#bq_next_box',                          // Selector of Next
  ], [
    '^http://togetter\.com/li/[0-9]+',
    false,                                   // Prev が必要ないときは false を指定
    'div[id^="more_tweet_box_"] a',
  ], [
    '^(http://kindai\.ndl\.go\.jp/info:ndljp/pid/[0-9]+|http://dl\.ndl\.go\.jp/info:ndljp/pid/[0-9]+)',
    'button[id="btn-prevpage"]',
    'button[id="btn-nextpage"]',
  ]].forEach(
    function (conf) {
      if (conf[1])
        liberator.execute('nnoremap -urls=\'' + conf[0] + '\' [[ :js let (n = content.document.querySelector(\'' + conf[1] + '\')) n ? n.click() : void(0)<CR>');
      if (conf[2])
        liberator.execute('nnoremap -urls=\'' + conf[0] + '\' ]] :js let (n = content.document.querySelector(\'' + conf[2] + '\')) n ? n.click() : void(0)<CR>');
    }
  );
EOM

おためし

上で設定したサイトでちゃんと [[]] が機能するか確認するために,てきとーに選んだサンプル用のページ,じっと見入ってしまうツイート2012 - Togetter」とエロエロ草紙」 を書いておく.正常に動作してることを確認できたら以後は追加したいタイミングが来たときに上の設定コードに適宜追加していけばどんどんムキィー!になることも少なくなるかも!

おしまい

というわけで,このように URL の正規表現や前後ページへ行くためのセレクタを調べて指定するだけで簡単に追加することができる.また,これをプラグイン化してしまうのもいいかも!

さぁこれで色んなサイトのページ繰りを [[]] のみで済ませて,あらゆる状況でもナビゲートできる男になっちゃいましょう!

Let's enjoy Vimperator!