vimperator pluginのwebsearch.jsを拡張(キーワードが無いときの挙動を追加)
最近 (ブログの更新 == websearch.jsの更新) になっていますね。
ということで、今回は拡張(機能追加)です。
参考:今までのwebsearch.jsのあゆみ
- ver. 0.0.1
- vimperatorのプラグインを作ってみた - SUGI @ to be a PLATINUM creator ...
- ver. 0.1.0
- websearch.jsを拡張(タブで開く挙動をコマンドごとに変更できるようにした) - SUGI @ to be a PLATINUM creator ...
- ver. 0.1.1
- websearch.jsを修正(複数キーワードで検索できるように変更) - SUGI @ to be a PLATINUM creator ...
変更点(ver 0.1.1 to 0.2.0)
- キーワードが無いときの挙動を追加しました。
- キーワードが無いときのURLを、quickmarksに登録するようにしました。
キーワードが無いないときの挙動
websearch.jsなのに、キーワードを使わない!
若干気持ち悪い感じですが、なくはない使い方なので、機能追加しました。
ある種の Bookmark のようにして使ってもらえるような拡張ですね。
問題は、キーワードありが前提のURLから、どのようにして、キーワードがないときのURLを扱うか?という点。
今回は2種類の方法で、キーワードが無いときのURLをwebsearch.jsが認識出来るようにしました。
- キーワードが無いときのURLを、custom templateに追加する
- キーワードが無いときの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 //新しいタブで開く
で、アクセスできるようになります。