InputHiliter 2.0を公開
Posted by yatsu Sat, 01 Mar 2008 10:43:34 GMT
Mac OS X 10.5でついにAPEが使えるようになりました。 Unsanity.org: Enthusiastic Trepidation からAPE 2.5b1をダウンロードできます。 WindowShade(ウィンドウをタイトルバーだけの表示に切り替えるアプリ)がないと生きていけないので、とても助かりました。 Leopard対応のAPEをリリースするまでの苦労話が上記Unsanityのページで読めます。
ちょうどよい機会なので、拙作のInputHiliterもLeopard + APE 2.5で動作するように作り直し、バージョン2.0をリリースしました。 Mac OS Xで「ことえり」などの入力プログラム(インプットメソッド)で漢字変換(または他の言語の変換)をするときに、変換中の文字に色をつけて強調表示してくれるものです。
InputHiliter
(ホームページも少しマシなものを用意しました)
今回からUnsanity Installerを使わせてもらいました。 APEをインストールしていない場合、インストーラがAPEも一緒にインストールしてくれるので便利です。 Unsanity.org: Pragmatic Disillusionmentによると、Unsanity Installerはサードパーティが自由に使ってよいそうです。ただし、まったくドキュメントがないので、WindowShadeのインストーラをコピーして、試行錯誤する必要がありました。(もし誰か希望する人がいたら、やり方を書いてもかまいません。)
ソースコードの管理はGoogle Codeを使わせてもらうことにしました。
LeopardになってからCocoa APIも少し変わったようで、今まで [NSTextView setMarkedText:selectedRange:] でフックしていたのを、[NSTextView setMarkedText:selectedRange:replacementRange:] に変更する必要がありました。
また、CからObjective-CのLow Level APIを通してNSRange(CFRange)を返す関数を呼び出すとき、PowerPCのときは以下のようにしていたのですが、
CFRange markedRange;
objc_msgSend_stret(&markedRange, inObj,
NSSelectorFromString(CFSTR("markedRange")));
IntelだとABIが互換でないため objc_msgSend_stret() はクラッシュするとのこと……。
以下のように変更する必要がありました。ややこしい。
CFRange (*markedRangeFunc)(void *id, void *SEL) =
(CFRange(*)(void *id, void *SEL)) objc_msgSend;
CFRange markedRange =
markedRangeFunc(inObj, NSSelectorFromString(CFSTR("markedRange")));
逆に今回はPowerPCで動作確認していないので、動作するのかわかりません。
どなたか試してみた方がいらっしゃいましたら、報告していただけると助かります。
(でも、アプリがクラッシュする可能性があるので、気をつけて!)
