✖
✖
Chemr-js
Chemr という .chm を読む Mac 向けのツールを作っていたのですが、環境の変化か何かで動かなくなってしまい、いろいろやってみたけどどうやっても直らなかったので代替を考えて実装しなおしました。
やはり、普段使ってるフィールドの技術でつくるのが最もメンテナンスしやすいと思い、ブラウザ+Greasemonkey で実現することにしました。実際のところ、僕が欲しいのは .chm を読むツールではなく、適切にインデックスが貼られたドキュメントをインクリメンタルサーチして統一した操作方法で読めるツールなので、別に .chm じゃなくても良いのです。高級なリファレンスツールやら拡張やらを使用していらっしゃるかたには必要ないかと思いますが個人的には便利に使えるようになったので紹介したいと思います。
- install: http://github.com/cho45/chemr-js/raw/master/chemr.user.js
- repository: http://github.com/cho45/chemr-js
使いかた
対応サイトにアクセスすると検索ボックスがでてくる
C-l (Cmd-L) で検索エリアにフォーカス、C-n で次を選択、C-p で前を選択、tab で最上位にある候補を補完、C-u でクリア、C-w でワード削除などとなっています。検索ボックスが邪魔なら ESC で消せる。C-l したらもっかいでてくる。
スペースは正規表現の .* みたいにふるまいます。pla midd とかで Plack::Middleware がマッチ
各種サイトにアクセスしたときにそのサイトをクロールしてインデックスをつくります。サイトによっては時間かかりますが大抵すぐおわります。 (Android のドキュメントとかは2000ページ近くクロールするので40分ぐらいかかりますし、静的ファイル相手とはいえ普通にDOSってる感があるので逮捕されても僕は責任とれません)
対応サイト
- http://search.cpan.org/
- http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/
- http://api.jquery.com/
- http://www.ruby-lang.org/
- http://developer.apple.com/
- なんかへんかも
- http://www.haskell.org/ghc/
- ノリでつくったけど使ってないのでへんかも
とかにいくと勝手にサーチウィンドウがでます。Android のサイトはこわいのでリンクはりません。
工夫した点
キーイベント
iframe を使っているのですが、iframe 内部にフォーカスがあるとショートカットキーが効かなくなってうざいので少々頑張っています。具体的には、iframe 内部の場合、親ウィンドウにキーイベントを伝播 (postMessage) するようにしてあります。postMessage なのは iframe 内のリンク遷移で外部ドメインにいってしまってもいいようにです。
高速な検索
mala さんが昔つくっていた http://la.ma.la/blog/diary_200604021538.htm のコードを参考にしつつ、一定数ヒットしたものを適当に好みでスコアリングして表示しています。URL のデータを追加したりしてるのでほんのすこし工夫してます。
html 入れ替え
サイトによってサーチウィンドウのフォントが変わったりして嫌だったので document.replaceChild(html, document.documentElement) という荒技をしてます。
対応サイトにアクセスしたとき、ロードしたページは iframe の中でロードされなおされ、本来読まれたページは chemr.user.js が乗っ取ります。ページ内のリンクは iframe の中なので、クリックしてもいちいち index を読みなおすこともなく快適です。
独立したアプリケーションのように
レポジトリに createapp.rb というのが入っていて、これをうまく使うと普段使いのブラウザとは別に、リファレンスひき専用のブラウザをつくれて便利です。特に Mac の場合、Cmd-Tab でアプリ間しか移動できないので必須です。
手順としては
- 既存の Firefox プロファイルに加え "chemr" という名前のプロファイルをつくる。
- createapp.rb を実行する ( /Application/Firefox.app と chemr というプロファイルが必要です)
- /Application/Chemr.app ができるのでこれを起動
- 普通の Firefox と同じように Greasemonkey (ほか好みで Stylish など) をインストール
- about:config で dom.storage.default_quota を大きく (しなくてもいいけど、100MB ぐらいにしとけば十分)
- chemr.user.js をインストール
- アドレスバーを消すとか、セッション復帰を有効にしたりする
です。非常に便利です。普段 Firefox を使わない方なら createapp.rb 使わず、普通に一個 profile 潰してもいいと思います。
✖
✖
✖
土曜日は植物園、太田神社、上賀茂神社にいったあと、鞄屋巡りで三条・新京極あたりをうろうろした。creareきき 桔梗商店 などなど。
結局、今まで使っていたのよりもひとまわり大きいのを買った。生地が薄くてちょっと不安な感じだけどしばらくつかってみる。ボストンバックみたいな見掛けだけどショルダーの帯がある。
関連エントリー
- ✖ 日曜日は植物園、太田神社、上賀茂神社、今宮神社と普通のコース
- ✖ 土曜日は上賀茂神社にいったあと植物園にいった。神社は人が多かった。植物園は薔薇がかなり咲いていてたいへん満足した。 単体のストロボを持ってな...
- ✖ 八坂神社 知恩院 (庭とかは見なかった。眺めただけ) 栗田神社 熊野神社 上賀茂神社 (中に入りたかったのだけど、ギリギリで閉門してしまって...
- ✖ 京都府立植物園 → 上賀茂神社 → 天龍寺 → 松尾大社 → 月読神社 上賀茂いってから嵐山にいくというルートは初めてだったけど以外と普通に...
- ✖ 土曜日は歯医者、植物公園、大田神社、上賀茂神社、今宮神社、晴明神社、びっくりドンキー、京都御苑 日曜日は天龍寺、野宮神社、月読神社、松尾大社...
✖
日曜日は、二条城にいったことがないと思ったのでいってきた。「あんまり面白くなさそうだなー」と思っていたので行かなかったのだけれど、行ってみたら実際あんまり面白くなかった。大政奉還の舞台というのは興味深いけれど、それだけだった。京都御苑歩くほうが楽しい (し、コストかからない)。
あと、なんとなく記憶の中にあった「二条城」というのがあって、だだっぴろい白砂利の中に、あんまり高くない建物がたっている場所なのだけれど、その記憶は「二条城」ではないことがわかった。じゃあどこなんだろう…… 修学旅行か何かでいった覚えがあるので、日光か、奈良か、京都だと思うのだけれど、よくわからない……
関連エントリー
- ✖ 修学旅行ぶりに金閣寺に行った。財布に1000円入っていなかったので入場できるか不安だったけれど、400円だった。御札が入場券の変わりになって...
- ✖ 土曜日は歯医者のあと、奈良へ。春日大社に行ってみたかったから。奈良は、結構近い気がするし、実際1時間ぐらいで着くのだけれど、片道で800円ぐ...
- ✖ 2年前に嵐山を歩いたとき、適当に歩いていたらついた場所があって、そこが印象に残っていたので、記憶を頼りにいってきた。事前に Google M...
- 魚眼レンズ あんまり使ってないので手放そうかと思ったが、久しぶりに使ってみた。思ったより面白くてわくわくしたので手放すのはやめた。
- ✖ 雨降ってたし徒歩で 京都御苑 → 京都御所 → 下鴨神社 → 御霊神社 御所はいくつもりなかったというか公開日は5月だと思ってたんだけどあい...











