インライン入力可能な Mac 用 Vim 7.0

僕は Mac でのエディタは Vim 6.4 Kaoriya 版をメインに使っていたりします.
で,そろそろ 7.0 に移行したいなぁと思って調べてみると,どうやら Mac 向けの Kaoriya 版 7.0 は無く,有志さんが 6.4 用のパッチを7.0 に当てて公開しているみたいなのですが,それらでは IM でインライン日本語入力が出来ないらしいじゃないですか! (インライン入力でなければ出来ます)


これは不便だということでちょっと原因を調べてみることにしました.7.0 のソースに 7.0 の Kaoriya パッチ(今はWinのみサポート)と 6.4 用の Kaoriya パッチから IM のインライン入力っぽい箇所を切り出したものをあてて,gui_mac.c あたりの TSM 関係の関数に適当に当たりを付けて gdb で調査することしばし.


分かったことは以下の通り.(あまり自信はないんだけど)

  • インライン入力で日本語を入力すると,ShiftJIS の文字列が tsmproc_post() に渡り,add_to_input_buf_csi() が呼ばれ,そのままインプットバッファに入る.
  • インライン入力ではなく日本語を入力すると,UTF-16? の文字列が gui_mac_doKeyEventCarbon() 内の GetEventParameter() に渡り,Vim の内部エンコーディング(たぶん UTF-8?) に変換され,add_to_input_buf() が呼ばれ,インプットバッファに.


よって,tsmproc_post() 内に渡った ShiftJIS の文字列を UTF-8 に変換してやればいいんじゃないか,と考えました.とっても ad-hoc だけど,とりあえず使えればいいや,ということで.


実際に変換するコードを入れてみたら,なんとなくうまくいったような気がします.
ただし,
set termencoding=utf-8
すると表示が文字化けして
set termencoding=japan
だと化けないという謎が・・・.暇ができたらもうちょっと深く調べよう.


Universal Binarydmzhttp://iplab.naist.jp/member/mio-su/dist/vim/vim7.0-inline0.1.dmg に置いておきました.ただし,Intel Mac では未テストです.不都合等ありましたら教えてください.
今回僕が追加した変換部分だけのパッチはそのうち作ります.