実装メモ
なんでないんだろう。いままで 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 にもあるんだ
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ファイルにしか分離せずクラスに機能をめっさ詰めこんでる (デリゲート対象になりまくってる)。これたぶんよくないんだろうけど、めんどいしなぁ。