2007年 10月 25日

Chemr

今日のスナップショット

http://lab.lowreal.net/test/chemr/Chemr.2007-10-24.dmg

全部入りの dmg です。RubyCocoa さえ同梱してあります (svn head にちかめ)。たれかです。


あとキーバインドを設定からよむようにして (たぶん ~/.chemr/chemr-keys あたりを eval するだけ)、ユーザ CSS はかなぁ。実装自体よりどうやったら簡単かで悩むむ。

キーバインドはいまのところ

keybinds = {
	"C-j" => self.method(:nextCandidate),
	"C-n" => self.method(:nextCandidate),
	"C-k" => self.method(:prevCandidate),
	"C-p" => self.method(:prevCandidate),
	"¥r"  => self.method(:jumpToCurrent),
	"¥t"  => self.method(:completion),
	" "   => Proc.new {|s|
		@webview.stringByEvaluatingJavaScriptFromString <<-JS
			window.scrollBy(0, 200);
		JS
	},
	"C-u" => Proc.new {|s|
		@search.stringValue = ""
	},
	"G-[" => Proc.new {|s|
		@webview.goBack
	},
	"G-]" => Proc.new {|s|
		@webview.goForward
	},
	"G-=" => Proc.new {|s|
		@webview.makeTextLarger(self)
	},
	"G--" => Proc.new {|s|
		@webview.makeTextSmaller(self)
	},
}

こんなかんじにしてある。.call! .call! Duck Typing! JS よんでるのがすこしきもいけど、WebView の API しらべるより簡単だし、いろいろできそうな感じがしてこれはこれでいい気がした

とにかくもう Ruby で書いてあるからもうなんでもできますね。ってかんじだけれど、トピックツリーを処理させるようにすると、NSOutlineView のよびだし (でも delegate メソッドではない) で頻繁に落ちようになったり、あと謎のタイミングで落ちるようになったりしたので機能を無効化してある。どうせキーワード検索しかつかわない。

2ファイルにしか分離せずクラスに機能をめっさ詰めこんでる (デリゲート対象になりまくってる)。これたぶんよくないんだろうけど、めんどいしなぁ。

Enumerable#group_by

なんでないんだろう。いままで partition がこれだとおもってた。

module Enumerable
	def group_by(&block)
		self.inject({}) {|r,i| (r[yield i] ||= []) << i; r}.values
	end
end

foo = Array.new(10) { rand(40) }

require "pp"
pp foo.group_by {|i|
	("%02d" % i)[0]
}

partition より汎用的で、partition にするにも ! 一個足すだけだからこっちがあったほうがいいと思うんだけどなぁ

検索してみると既出すぎる……ActiveSupport にもあるんだ

Chemr どうにかしたいリスト

  • ページ内検索
  • 全文検索 (chmlib binding のほうに API だけは移植した)
  • InputMethod の変換中はキーバインドを無効にしたい (IM の有効無効をどうやってとるか謎い)

実装メモ

  • WebView の performFindPanelAction はうごかない
    • なんでっておもってたけど、そういうもんみたいだ。リファレンスにのっけておくなよ><
  • 全文検索で日本語が検索できない。
    • binding の実装がわるいんだろうけど (文字コードを NKF で変換できる範囲で変えてみたけどだめだった)
    • 実装しなおすにはフォーマットをちゃんと理解しないといけない
    • 閉じた仕様でなおかつ消えていきそうな仕様の理解を深めても……
    • とはいえ実装おったり、http://www.nongnu.org/chmspec/latest/Internal.html#FIftiMain 読んだりした……めんどくさい
  • OutlineView はやっぱ落ちまくる
    • Tree 表示のタブを選択するまで、データソースを設定しないようにしてみた
    • 表示させちゃうと (しかもたくさん CHM ひらいていると) 落ちやすくなる
  • IM 変換中のキーバインド無効はコメントをいただいたのをそのまま条件文に