2006-11-10
TextMate の日本語入力
日本語の入力はダイアログを経由する inputCJK.tmbundle でとりあえず可能(Typing Japanese in TextMate | Samurai Coder を tmbundle にしたものだと思われる)。しかしこの方法だと、入力前にショートカットを押さないとダイアログが出てこない。
TextMate のテキスト表示部分は OakTextView という view で、NSView を直接継承している。ほとんどの処理は C++ で行われているのでつけ入る隙がない。NSTextInput プロトコルは実装されているものの、中身は何もしていない。setMarkedText:selectedRange: を横取りして、日本語が入力されたら別の NSTextView を出して続きを入力させるという方法を試してみた。最初の1文字をどうやって受け渡すかで少々迷ったものの、とりあえず動作させることができた。表示位置だとか、別の場所をクリックした場合の処理とか、未実装の項目が多いけれど、screencast をとってみた。Screenography というシェアウェアで作成。デモ版なので「DEMO」とウォータマークが入っているが、このムービーには相応しい(笑)。
入力パレット風 NSTextView の表示位置をどうするかが難しいところ。OakTextView の選択範囲や挿入ポイントの座標を取得する方法が分からない。vim のコマンド行(?)やチャットソフトの入力欄のようにウインドウ下部に固定するのが無難かなと思う。vim 風にするなら vim のようにコマンド入力もできれば楽しいかもしれない。
OakTextView の挿入ポイントの座標は、それっぽい座標を取得することができた。ウインドウやメニューを出すために用意された座標なので若干の調整が必要だった。

