Firefoxのスマートキーワードの仕組み

検索フォーム(やブックマーク)から設定するタイプのスマートキーワードの仕組みについて説明します。
Firefoxのスマートキーワードの基本的な使い方で示した方法でサーチエンジンを追加した場合、
実際には、キーワード付きのページがブックマークに保存されています。
これは、メニューバーの「ブックマーク」→「ブックマークの管理…」から見ることができます。



ブックマークに保存されたサーチエンジンは、URLの一部に %s が含まれたものになっています。
アドレスバーから検索した場合、実際には、%sを、検索する言葉に置き換えてページにアクセスする、ということが起こっています。
これを利用すれば、検索フォームからではなく、ブックマークの管理から直接スマートキーワードを設定することが可能となります。

Firefoxの検索バーのプラグインを自作する

検索プラグインを使えば、検索フォーム(やブックマーク)から設定すると日本語が化けてしまうサーチエンジンでも、日本語を文字化けを防止して、アドレスバーからの検索ができます。
しかし、検索プラグインが用意されているものは限られています。


検索プラグインテキストエディタを使って自分で作ることができます。
検索プラグインのファイルは、文字コードUTF-8、改行コードはLFで作成しますので、
文字コードと改行コードの設定ができるテキストエディタを使います。
WindowsならOEditMac OS XならCotEditormiなど)


ここでは、最小限の構成での検索プラグインの作り方を説明します。
まず完成形を見てみましょう。
ファイルの中身は以下のようなものになります。

<?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&amp;q={searchTerms}&amp;lr=lang_ja" />
</OpenSearchDescription>

ShortNameの項目には、サーチエンジンの短縮名、
Descriptionの項目には、サーチエンジンの名前(完全名)、
InputEncodingの項目には、サーチエンジン文字コード
Urlの項目には、サーチエンジンURI文字列を書きます。


上記の完成形をテキストエディタにコピー&ペーストして、それを書き換えていくことにします。
短縮名と名前は、サーチエンジンの機能には影響がないので、好きに入れてかまいません。
重要なのは文字コードURI文字列です。

作りたいサーチエンジンに、英字か英単語を入れて検索してみます。
そして、メニューバーの「表示」→「文字エンコーディング」を見ると、そのサーチエンジンで使われている文字コードにチェックが入っているはずです。
(ほとんどの場合はUTF-8Shift_JISEUC-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の再起動後に有効になります。


Firefoxの検索バーから設定するスマートキーワード

検索フォーム(またはブックマーク)からスマートキーワードを設定する方法だと、日本語が通らないサーチエンジンがあります。
そういう場合には、検索バーにサーチエンジンを追加して、それにキーワードを設定すれば、日本語が使えるようになります。*1

検索バーにサーチエンジンを追加するための検索プラグインMozilla Japan - Firefox 用アドオン - 検索エンジン にあります。


また、検索プラグインに対応済みのサイトの場合は、検索バーのアイコンをクリックしたときに、"〜を追加" という選択肢が出ます。


検索プラグインをインストールしたら、次はキーワードの設定をします。



検索バーのアイコンをクリックし、「検索バーの管理…」を選択します。



サーチエンジンを選んで、「キーワードを編集…」をクリックします。



キーワードを設定し、OKを選択、そしてもう一度OKを選択すれば、キーワードの設定は完了です。
これで、検索フォーム(やブックマーク)から設定した場合と同じく、アドレスバーからの検索ができます。
この方法なら検索プラグインが適切に作られている限り、日本語が化ける心配もありません。


*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グループにアクセス

一部のエンジンでの文字化けの解消

文字コードShift_JISEUC-JPになっていて、文字化けしてしまうサーチエンジンはブックマークファイル(bookmarks.html)を直接編集すれば文字化け解消できるらしい。
(LAST_CHARSET="Shift_JIS" や LAST_CHARSET="EUC-JP" を記述する。)
(参考: keijisato.info - Firefoxのアドレスバーからの検索(スマートキーワード)

理想の物理キーボード配列/現在使っているキーボード配列

こんなキーボードが欲しい

ハート型キーボード "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を入れればだいたい同じ感じ(意図通り)になる。

実際に使っている配列

実際に使っているのは次のような配列。
現在は、これにColemak + 弓配列 X-101で使っている。
(蠍配列は、MacUIMでの実装に難儀していて、まだ実使用はできていない)

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

EmacsEmacs において対応するものだが、caseの扱いなど、完全に対応しているわけではない。

設定方法

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でなければならない)