Firefoxのスマートキーワードの仕組み
検索フォーム(やブックマーク)から設定するタイプのスマートキーワードの仕組みについて説明します。
Firefoxのスマートキーワードの基本的な使い方で示した方法でサーチエンジンを追加した場合、
実際には、キーワード付きのページがブックマークに保存されています。
これは、メニューバーの「ブックマーク」→「ブックマークの管理…」から見ることができます。
ブックマークに保存されたサーチエンジンは、URLの一部に %s が含まれたものになっています。
アドレスバーから検索した場合、実際には、%sを、検索する言葉に置き換えてページにアクセスする、ということが起こっています。
これを利用すれば、検索フォームからではなく、ブックマークの管理から直接スマートキーワードを設定することが可能となります。
Firefoxの検索バーのプラグインを自作する
検索プラグインを使えば、検索フォーム(やブックマーク)から設定すると日本語が化けてしまうサーチエンジンでも、日本語を文字化けを防止して、アドレスバーからの検索ができます。
しかし、検索プラグインが用意されているものは限られています。
検索プラグインはテキストエディタを使って自分で作ることができます。
検索プラグインのファイルは、文字コードはUTF-8、改行コードはLFで作成しますので、
文字コードと改行コードの設定ができるテキストエディタを使います。
(WindowsならOEdit、Mac OS XならCotEditor、miなど)
ここでは、最小限の構成での検索プラグインの作り方を説明します。
まず完成形を見てみましょう。
ファイルの中身は以下のようなものになります。
<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/"> <ShortName>Google</ShortName> <Description>Google</Description> <InputEncoding>UTF-8</InputEncoding> <Url type="text/html" method="GET" template="http://www.google.co.jp/search?hl=ja&q={searchTerms}&lr=lang_ja" /> </OpenSearchDescription>
ShortNameの項目には、サーチエンジンの短縮名、
Descriptionの項目には、サーチエンジンの名前(完全名)、
InputEncodingの項目には、サーチエンジンの文字コード、
Urlの項目には、サーチエンジンのURI文字列を書きます。
上記の完成形をテキストエディタにコピー&ペーストして、それを書き換えていくことにします。
短縮名と名前は、サーチエンジンの機能には影響がないので、好きに入れてかまいません。
重要なのは文字コードとURI文字列です。
作りたいサーチエンジンに、英字か英単語を入れて検索してみます。
そして、メニューバーの「表示」→「文字エンコーディング」を見ると、そのサーチエンジンで使われている文字コードにチェックが入っているはずです。
(ほとんどの場合はUTF-8、Shift_JIS、EUC-JPのいずれかです)
それを InputEncoding の項目に書き込みます。これで文字コードの設定は完了です。
次はURI文字列です。
まずは、検索結果のページのアドレスを、Urlの項目のtemplate=""の"と"の間にコピー&ペーストします。
するとその文字列の中には、検索した英字が含まれているはずです。
その部分を{searchTerms}に置き換えます。
それからもう一つ、&が含まれていたら、それはすべて、&に置き換えます。
これで検索プラグインは完成です。サーチエンジン名.xml というファイル名で保存します。
保存する場所は環境によっても違いますが、
Windows 2000/XP/Vista/7 なら
C:\Documents and Settings\<ユーザ名>\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\
Mac OS X なら
/Users/<ユーザ名>/Library/Application Support/Firefox/Profiles/xxxxxxxx.default/
Linux なら
~/.mozilla/firefox/xxxxxxxx.default/
であるのが一般的です。
Firefoxの検索バーから設定するスマートキーワード
検索フォーム(またはブックマーク)からスマートキーワードを設定する方法だと、日本語が通らないサーチエンジンがあります。
そういう場合には、検索バーにサーチエンジンを追加して、それにキーワードを設定すれば、日本語が使えるようになります。*1
検索バーにサーチエンジンを追加するための検索プラグインは Mozilla Japan - Firefox 用アドオン - 検索エンジン にあります。
また、検索プラグインに対応済みのサイトの場合は、検索バーのアイコンをクリックしたときに、"〜を追加" という選択肢が出ます。
検索プラグインをインストールしたら、次はキーワードの設定をします。
検索バーのアイコンをクリックし、「検索バーの管理…」を選択します。
サーチエンジンを選んで、「キーワードを編集…」をクリックします。
キーワードを設定し、OKを選択、そしてもう一度OKを選択すれば、キーワードの設定は完了です。
これで、検索フォーム(やブックマーク)から設定した場合と同じく、アドレスバーからの検索ができます。
この方法なら検索プラグインが適切に作られている限り、日本語が化ける心配もありません。
このブログ内の関連エントリ
Firefoxのアドレスバーから素早く検索できる、“スマートキーワード”の基本的な使い方
Firefoxの検索バーのプラグインを自作する
Firefoxのスマートキーワードの仕組み
検索結果のページからFirefoxの検索プラグインを生成するブックマークレット/スマートキーワード
*1:ブックマークをHTMLに書き出して編集する方法もあるようですが、あまりおすすめはしません
Firefoxのアドレスバーから素早く検索できる、“スマートキーワード”の基本的な使い方
スマートキーワードとは
Firefoxのスマートキーワードは、サーチエンジンに1文字〜数文字のキーワードを設定して、
アドレスバー(ロケーションバー)を検索フォームとして使えるようにする機能です。
たとえば、Googleにキーワード g を設定すれば、
アドレスバーに「g 検索したい言葉」と入れて Enter (またはreturn) を押すことで、Googleで検索することができるようになります。
設定方法
サーチエンジンにキーワードを設定するには、検索フォームで右クリック(Macでは control + クリック)したら出てくる、コンテキストメニューから、「この検索にキーワードを設定…」を選択し、キーワードを設定して保存します。
これで、アドレスバーからGoogleで検索できるようになります。
スマートキーワードは多くの検索フォームに対応していますが、この方法だと日本語が通らない(文字化けしてしまう)サーチエンジンもあります。
そういった場合は上記のような方法ではなく、検索バーにサーチエンジンを登録して、そのサーチエンジンにキーワードを設定する必要があります。*1
*1:ブックマークをHTMLに書き出して編集する方法もあるようですが、あまりおすすめはしません
Firefoxでスマートキーワード+ブックマークレット(JavaScript)
Firefoxのロケーションバー(アドレスバー)から検索を行える、スマートキーワード。
(参考: Firefoxのスマートキーワード - えむもじら)
これは、検索バーのようにサーチエンジンを選ばなくてもキーボードだけで素早く検索できるのでよく使っている。
で、このスマートキーワードとブックマークレットを組み合わせて使うことができることに気づいた。
スマートキーワードだけだと、乗換案内の検索などでクエリを2つ送りたい場合などには対応できないのだけど、
JavaScriptを併用すれば、この問題は解決する。
とりあえず作ってみたのが以下のもの。(skは設定したキーワード部分としている)
Googleマップ (ルート・乗換案内)
javascript:var s = '%s'; args = s.split(/, |; |;|,| /i); location.href = "http://local.google.co.jp/maps?q=from%3A" + args[0] + '%20to%3A' + args[1];
ロケーションバーへの入力 | 結果 |
---|---|
sk 東京 大阪 | "from:東京 to:大阪"で検索 |
sk 東京, 大阪 | "from:東京 to:大阪"で検索 |
goo辞書 - 英和辞典
javascript: var s = '%s'; var url_prefix = "http://dictionary.goo.ne.jp/srch/ej/"; if(s.match(/^-\w/)){ var url = url_prefix + s.replace(/^-/, '') + '/m2u/'; } else if(s.match(/=/)) { var url = url_prefix + s.replace(/=/, '') + '/m1u/' } else { var url = url_prefix + s + '/m0u/'; }; location.href = url;
ロケーションバーへの入力 | 結果 |
---|---|
sk word | wordを前方一致検索 |
sk -word | wordを後方一致検索 |
sk =word | wordを完全一致検索 |
sk word= | wordを完全一致検索 |
はてなグループ
javascript:var s = '%s'; var ary = s.split(/, |; |;|,| /i); location.href = "http://" + ary[0] + '.g.hatena.ne.jp/' + (ary[1] ? (ary[1] + '/') : '');
ロケーションバーへの入力 | 結果 |
---|---|
sk group diary | groupグループのdiary日記にアクセス |
sk group, diary | groupグループのdiary日記にアクセス |
sk group | groupグループにアクセス |
理想の物理キーボード配列/現在使っているキーボード配列
こんなキーボードが欲しい
ハート型キーボード "heartkeys" v1 - Wisteria::Diaryに触発されて、私が欲しいキーボードの物理配列を考えてみた。
heartkeysの大胆さに比べるとかなり普通っぽい感じ。
(Happy Hacking Keyboard Lite2 + µTRONっぽい?)
heartkeysは親指キーが多すぎる気がするけど、やっぱり親指重要。
Shiftはあえてサイドで。でもHyperの位置に置くのもいいかもしれない。
英字はColemak化するんだけどキーの印字はQwertyでいいので反映させていない。
画像はMac向けの配列にしたけど、Windows向けを考えてもほぼ同じ。
Winでは、CmdをCtrlに、OptをAltに、ReturnをEnterに、そしてFnに無変換,変換,全角/半角,Insert,Print Screen,Pause/Breakを入れればだいたい同じ感じ(意図通り)になる。
Mac OS Xで使っているキーバインド
機能 | キーバインド | Emacs | DefaultKeyBinding.dict | Butlerでの定義 |
---|---|---|---|---|
1文字前に移動 | C-j | backward-char | moveBackward: | ← |
1文字後ろに移動 | C-; | forward-char | moveForward: | → |
1行前に移動 | C-l | previous-line | moveUp: | ↑ |
1行後ろに移動 | C-k | next-line | moveDown: | ↓ |
1単語前に移動 | C-, | forward-word | moveWordBackward: | A-← |
1単語後ろに移動 | C-. | backward-word | moveWordForward: | A-← |
行頭に移動 | C-a | beginning-of-line | moveToBeginningOfParagraph: | M-← |
行末に移動 | C-e | end-of-line | moveToEndOfParagraph: | M-→ |
1画面前に移動 | C-b | scroll-up | pageUp: | A-PageUp |
1画面後ろに移動 | C-v | scroll-down | pageDown: | A-PageDown |
文書の先頭に移動 | C-M-, | beginning-of-buffer | moveToBeginningOfDocument: | M-↑ |
文書の末尾に移動 | C-M-. | end-of-buffer | moveToEndOfDocument: | M-↓ |
1文字前に選択移動 | C-S-j | moveBackwardAndModifySelection: | S-← | |
1文字後ろに選択移動 | C-S-; | moveForwardAndModifySelection: | S-→ | |
1行前に選択移動 | C-S-l | moveUpAndModifySelection: | S-↑ | |
1行後ろに選択移動 | C-S-k | moveDownAndModifySelection: | S-↑ | |
1単語前に選択移動 | C-S-, | A-S-← | ||
1単語後ろに選択移動 | C-S-. | A-S-→ | ||
行頭まで選択移動 | C-S-a | M-S-← | ||
行末まで選択移動 | C-S-e | M-S-→ | ||
1画面前に移動 | C-S-b | S-PageUp | ||
1画面後ろに移動 | C-S-v | S-PageDown | ||
文書の先頭まで選択移動 | C-M-S-, | M-S-↑ | ||
文書の末尾まで選択移動 | C-M-S-. | M-S-↓ | ||
前の文字を削除 | C-h | delete-backward-char | deleteBackward: | BS |
後ろの文字を削除 | C-d | delete-char | deleteForward: | DEL |
前の単語を削除 | C-M-h | backward-killword | deleteWordBackward: | A-BS |
後ろの単語を削除 | C-M-d | backward-killword | deleteWordForward: | A-DEL |
行末まで削除 | C-k | kill-line | deleteToEndOfParagraph: | M-S-→ BS |
行頭まで削除 | C-M-k | M-0 C-k | deleteToBeginningOfParagraph: | M-S-← BS |
ヤンク | C-i | yank | yank: | |
クリップボード履歴 | C-S-i | yank-pop | ||
改行 | C-m | newline | insertNewline: | RET |
前方に1つ空行を追加 | C-o | open-line | insertNewlineIgnoringFieldEditor: | RET ↑ M-→ |
前後の文字を入れ替え | C-t | transpose-chars | transpose: | → ← S-← M-x → M-v |
前後の単語を入れ替え | C-M-t | transpose-words | A-← A-→ A-→ A-← A-S-← M-x A-→ SPC C-v A-S-← A-S-→ M-x A-← M-v A-← A-→ DEL A-→ | |
前後の単語を入れ替え(Firefox) | C-M-t | transpose-words | A-← A-→ A-→ A-← BS C-x A-→ SPC C-v | |
前後の行を入れ替え | C-S-t | transpose-lines | M-← M-s-→ M-x DEL C-← M-v RET | |
単語を選択 | C-S-w | selectWord: | A-→ A-S-← | |
行を選択 | C-S-p | selectParagraph: | M-→ M-S-← | |
単語を大文字に | C-M-u | upcase-word | uppercaseWord: | |
単語を小文字に | C-M-l | downcase-word | lowercaseWord: | |
単語をキャピタライズ | C-M-c | capitalize-word | capitalizeWord: | |
マークを設定 | C-SPC | set-mark-command | setMark: | |
マークを入れ替え | C-x C-x | exchange-point-and-mark | swapWithMark: |
略号の意味など
M- | Command + |
C- | Control + |
A- | Option + |
S- | Shift+ |
SPC | スペースバー |
RET | Return |
BS | Backspace |
DEL | Foward Delete |
設定方法
Butler では「スマートアイテム:キーストローク」を使って定義する。
DefaultKeyBinding.dict は Cocoaアプリ(正確にはNSTextViewを使用するアプリ)でのみ使用可能。
~/Library/KeyBindings/DefaultKeyBinding.dict というテキストファイルを作ってると設定できる。(要再ログイン)
C-x C-f のようなマルチアクションも設定可能となっている。
参考:Translations/Mac OS X Key Bindings - Log By Kenji Akeno
追記(2009-04-25)
画面単位の移動で、PageUp / PageDownだと画面は移動するもののカーソルは移動しないらしく、
A-PageUp / A-PageDownなら問題ないということがわかったので書き換えた。
(ただしWebブラウザのスクロールではPageUp / PageDownでなければならない)