vimperator pluginのwebsearch.jsを拡張(キーワードが無いときの挙動を追加)

最近 (ブログの更新 == websearch.jsの更新) になっていますね。

ということで、今回は拡張(機能追加)です。


変更点(ver 0.1.1 to 0.2.0)

  • キーワードが無いときの挙動を追加しました。
  • キーワードが無いときのURLを、quickmarksに登録するようにしました。

キーワードが無いないときの挙動

websearch.jsなのに、キーワードを使わない!
若干気持ち悪い感じですが、なくはない使い方なので、機能追加しました。
ある種の Bookmark のようにして使ってもらえるような拡張ですね。

問題は、キーワードありが前提のURLから、どのようにして、キーワードがないときのURLを扱うか?という点。
今回は2種類の方法で、キーワードが無いときのURLをwebsearch.jsが認識出来るようにしました。

  1. キーワードが無いときのURLを、custom templateに追加する
  2. キーワードが無いときのURLがcustom templateにないときは、キーワードで検索するためのURL(url)のHOST部分を参照する

一つずつ、見ていきます。


キーワードが無いときのURLを、custom templateに追加する

custom templateを拡張して、キーワードが無いときのURLを、ユーザーが登録できるように拡張しました。

urlWithoutKeyword: 'http://www.alc.co.jp'

というように、urlWithoutKeywordというラベルに対して、URLを文字列で設定できます。

custom templateの全体像としては、以下のようになりました。

liberator.globalVariables.webSearchTemplates = [
  { names: ['alc'], description: 'search alc', url: 'http://eow.alc.co.jp/%KEYWORD%/UTF-8/', tabOpen: true, urlWithoutKeyword: 'http://www.alc.co.jp' }
];

この場合、

:alc fire

と打つと、ALCで、「fire」というキーワードが検索されます(http://eow.alc.co.jp/fire/UTF-8/)が、

:alc

とだけ打つと、キーワードが無いので、キーワードが無いときのURL(urlWithoutKeyword)に登録されたURL(http://www.alc.co.jp)が開かれます。


キーワードがないときのURLがcustom templateにないときは、キーワードで検索するためのURL(url)のHOST部分を参照する

ユーザーが、わざわざ、いちいち、キーワードが無いときのURL(urlWithoutKeyword)を登録するのはめんどくさいので、(かつ下位互換性を保ちたかったので)、
キーワードが無いときのURL(urlWithoutKeyword)を、キーワードで検索するためのURL(url)のHOST部分を参照して生成するようにしました。

キーワードで検索するためのURLは、custom templateで、urlというラベルで設定していただいている、websearch.jsのコアの部分です。

例えば、rubygems.orgで検索する、以下のようなcustom templateがあったとき、

{ names: ['gems'], description: 'search rubygems.org', url: 'http://rubygems.org/search?utf8=%E2%9C%93&query=%KEYWORD%' }

キーワードが無いときのURL(urlWithoutKeyword)は設定されていませんが、

:gems

と打つと、gemsのトップページ(http://rubygems.org/)がひらかれます。
これはurlにせっていされているhttp://rubygems.org/search?utf8=%E2%9C%93&query=%KEYWORD%というURLのHOST部分を参照させています。
(正確には、http/httpsのプロトコル部分+host部分を抜き出している)


キーワードが無いときのURLを、quickmarksに登録する

キーワードが無いときのURLは、ほぼほぼ bookmark だという認識でした。
なので、せっかくだから、vimperatorが提供してる簡易ブックマーク的な、quickmarksを活用しました。

{ names: ['alc'], description: 'search alc', url: 'http://eow.alc.co.jp/%KEYWORD%/UTF-8/', tabOpen: true, urlWithoutKeyword: 'http://www.alc.co.jp' }

このcustom templateでは、quickmarksに対して、キーワードが無いときのURL(urlWithoutKeyword)の「http://www.alc.co.jp」を、名前(names)のイニシャル「a」で登録するようにしています。

名前(names)に複数の名前が登録されていた場合には、最初の名前のイニシャルが採用されます。

vimperator的に登録するときのコマンドだと、

qmark a http://www.alc.co.jp

が、plugin読み込み時に行われている、という感じですね。

quickmarksを使うときは、

go[a-zA-Z0-9] //現在のタブで開く
gn[a-zA-Z0-9] //新しいタブで開く

なので、alcの場合は、

goa //現在のタブで開く
gna //新しいタブで開く

で、アクセスできるようになります。



ということで

おためしあれ!

今回は、githubのREADMEも書きました〜

https://github.com/sugilog/websearch.vimpr