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を使わせてもらうことにしました。

inputhiliter - 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で動作確認していないので、動作するのかわかりません。 どなたか試してみた方がいらっしゃいましたら、報告していただけると助かります。
(でも、アプリがクラッシュする可能性があるので、気をつけて!)

Comments

Trackbacks

Use the following link to trackback from your own site:
http://yatsu_info/articles/trackback/21377

(leave url/email »)

   Comment Markup Help Preview comment